Вывести архивы дат для определенной категории

  • Автор темы Автор темы iJoGol
  • Дата начала Дата начала

iJoGol

Творец (III)
Сообщения
17
Реакции
7
Баллы
339
Как известно в WP можно получить архив дат только для всех записей, а указать конкретную категорию возможности нет...
Более того, нет ни одного поддерживаемого плагина для этого и практически ни одного топика нигде - за исключением постов 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

но при переходе архив этой категории не открывается
Буду рад любой помощи ..
 
Последнее редактирование:
Назад
Верх