Архівний список (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'
));