Архивный список (wp_get_archives) для собственных типов постов в WordPress

Опубликовано:

Стандартная функция “wp_get_archives” в CMS WordPress по умолчанию не позволяет вывести список архивных ссылок для собственных (кастомных) типов постов. На помощь спешит простое решение методом перехвата (фильтрации) аргументов при построении запроса базы данных.

Создаем фильтр:

add_filter('getarchives_where', 'Custom_Post_Type_Archive', 10, 2);

Далее описываем нашу функцию фильтра:

function Custom_Post_Type_Archive($where, $args)
{
    $post_type = isset($args['post_type']) ? $args['post_type'] : 'post';
    $where = "WHERE post_type = '{$post_type}' AND post_status = 'publish'";

    return $where;
}

Все. Осталось только выполнить стандартную функцию вывода архивного списка в нужном месте темы, где потребуется указать дополнительный аргумент “post_type”, например:

wp_get_archives(array(
    'post_type'       => 'news',
    'type'            => 'yearly',
    'limit'           => -1,
    'format'          => 'html',
    'before'          => '',
    'after'           => '',
    'show_post_count' => false,
    'echo'            => 1,
    'order'           => 'DESC'
));