Как известно в WP можно получить архив дат только для всех записей, а указать конкретную категорию возможности нет...
Более того, нет ни одного поддерживаемого плагина для этого и практически ни одного топика нигде - за исключением постов 10 летней давности которые не работают... Либо я чего то не знаю, и все таки я могу получить архив дат категории в которой нахожусь из коробки, или я не понимаю почему никто и никогда на протяжении 10 лет этого не сделал?
Есть вот такой но почему о не рабочий код, подскажите плиз, что где поправить, чтобы заработало ?
В functions.php
В нужном месте в шаблоне
Ссылка формируется /2022/?cat=46
но при переходе архив этой категории не открывается
Буду рад любой помощи ..
Более того, нет ни одного поддерживаемого плагина для этого и практически ни одного топика нигде - за исключением постов 10 летней давности которые не работают... Либо я чего то не знаю, и все таки я могу получить архив дат категории в которой нахожусь из коробки, или я не понимаю почему никто и никогда на протяжении 10 лет этого не сделал?
Есть вот такой но почему о не рабочий код, подскажите плиз, что где поправить, чтобы заработало ?
В functions.php
Код:
add_filter('getarchives_where', 'custom_archives_where', 10, 2);
add_filter('getarchives_join', 'custom_archives_join', 10, 2);
function custom_archives_join($x, $r) {
global $wpdb;
$cat_ID = $r['cat'];
if (isset($cat_ID)) { return $x . " INNER JOIN $wpdb->term_relationships ON ($wpdb->posts.ID = $wpdb->term_relationships.object_id) INNER JOIN $wpdb->term_taxonomy ON ($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id)";
} else {
return $x;
}
}
function custom_archives_where($x, $r) {
global $wpdb;
$cat_ID = $r['cat'];
if (isset($cat_ID)) {
return $x . " AND $wpdb->term_taxonomy.taxonomy = 'category' AND $wpdb->term_taxonomy.term_id IN ($cat_ID)";
} else {
$x;
}
}
function wp_get_cat_archives($opts, $cat) {
$child_cats = get_term_children($cat, 'category');
$child_cats[] = $cat;
$cat_id = implode(',', $child_cats);
$args = wp_parse_args($opts, array('echo' => '1')); // default echo is 1.
$echo = $args['echo'] != '0'; // remember the original echo flag.
$args['echo'] = 0;
$args['cat'] = $cat_id;
$tag = ($args['format'] === 'option') ? 'option' : 'li';
$archives = wp_get_archives(build_query($args));
$archs = explode('</'.$tag.'>', $archives);
$links = array();
foreach ($archs as $archive) {
$link = preg_replace("/='([^']+)'/", "='$1?cat={$cat}'", $archive);
array_push($links, $link);
}
$result = implode('</'.$tag.'>', $links);
if ($echo) {
echo $result;
} else {
return $result;
}
}
В нужном месте в шаблоне
Код:
<?php $cat_ID = $term->term_id; wp_get_cat_archives('type=yearly', $cat_ID);?>
Ссылка формируется /2022/?cat=46
но при переходе архив этой категории не открывается
Буду рад любой помощи ..
Последнее редактирование: