WP_GET_ARCHIVES() │ WordPress 1.2.0
Функция wp_get_archives() отображает ссылки на архивы постов, сгруппированные по типу и формату.
Замечание о производительности:
Время выполнения:
- 1 раз — 0.004392 сек (очень медленно)
 - 50000 раз — 111.96 сек (крайне медленно)
 
PHP: 7.0.5, WordPress: 4.4.2
Хуки функции
getarchives_wheregetarchives_jointhe_title
Возврат значения
Функция возвращает null или строку. Если аргумент echo равен true, возвращается null. Если echo равен false, возвращаются ссылки на архивы.
Использование
wp_get_archives( $args );
Аргументы
Параметры функции могут быть переданы в виде строки или массива. Аргументы по умолчанию:
$args = '';
- 
type (string)
Тип архива, который нужно получить. Возможные значения:daily,weekly,monthly,yearly,postbypost, илиalpha.
postbypostиalphaотображают одинаковый список архивов, ноalphaсортирует по заголовку поста, аpostbypost— по дате поста.
По умолчанию:monthly - 
limit (string|int)
Максимальное количество ссылок, которые нужно вернуть.
По умолчанию: нет ограничения. - 
format (string)
Формат, который должен иметь каждый выводимый элемент ссылки. Возможные значения:link,option,htmlили пользовательский формат.
По умолчанию:html - 
before (string)
Разметка, которая добавляется перед каждой ссылкой.
По умолчанию: пустая строка. - 
after (string)
Разметка, которая добавляется после каждой ссылки.
По умолчанию: пустая строка. - 
show_post_count (true|false)
Отображать ли количество постов рядом со ссылкой.
По умолчанию: false - 
echo (true|false|int)
Отображать ли список ссылок (echo) или возвращать его.
По умолчанию: 1 (true для отображения) - 
order (string)
Порядок сортировки:ASC(по возрастанию) илиDESC(по убыванию).
По умолчанию:DESC - 
post_type (string)
Тип поста.
По умолчанию:post - 
year (string)
Год для фильтрации.
По умолчанию: текущий год. - 
monthnum (string)
Номер месяца для фильтрации.
По умолчанию: текущий номер месяца. - 
day (string)
День для фильтрации.
По умолчанию: текущий день. - 
w (string)
Номер недели для фильтрации.
По умолчанию: текущая неделя. 
Примеры использования
Пример 1: Отображение архива постов, сгруппированного по месяцам
Этот код покажет архивы за последние 12 месяцев.
Пример 2: Отображение архива постов, сгруппированного по дням
'daily', 'limit'=>14, 'show_post_count' => 'true' ] ); ?>
Этот код отобразит архив постов за последние 14 дней с указанием количества постов в скобках, например, "2 ноября 2015 (3)".
Пример 3: Отображение списка последних 20 постов в алфавитном порядке
Пример 4: Выпадающий список архива по месяцам
Этот код создаст выпадающий список для выбора месяца с указанием количества постов.
Пример 5: Отображение списка всех постов в алфавитном порядке
Пример 6: Добавление rel="nofollow" ко всем ссылкам из списка
$archives = wp_get_archives( [
    'echo'   => 0,
    'type'   => 'postbypost',
    'limit'  => 3,
    'format' => 'html',
] );
echo str_replace( '
Пример 7: Фильтрация по определенной категории
add_filter( 'getarchives_where', 'custom_archive_by_category_where' );
add_filter( 'getarchives_join', 'custom_archive_by_category_join' );
$args = array();
wp_get_archives( [
    'type'            => 'yearly',
    'format'          => 'option',
    'post_type'       => 'news',
] );
remove_filter( 'getarchives_where', 'custom_archive_by_category_where' );
remove_filter( 'getarchives_join', 'custom_archive_by_category_join' );
Эти фильтры могут быть использованы для изменения ссылок архивов в зависимости от категории.
Пример 8: Получение массива с названиями и значениями
function theme_name_get_year_archive_array() {
    $years = [];
    $years_args = [
        'type'      => 'monthly',
        'format'    => 'custom',
        'before'    => '',
        'after'     => '|',
        'echo'      => false,
        'post_type' => 'news',
        'order'     => 'ASC',
    ];
    $years_content = wp_get_archives( $years_args );
    if( ! empty( $years_content ) ){
        $years_arr = explode( '|', $years_content );
        $years_arr = array_filter( $years_arr, function( $item ) {
            return trim( $item ) !== '';
        });
        foreach( $years_arr as $year_item ){
            $year_row = trim( $year_item );
            preg_match( '/href=["']?([^"'>]+)["']>(.+)/', $year_row, $year_vars );
            if( ! empty( $year_vars ) ){
                $years[] = [
                    'name'  => $year_vars[2],
                    'value' => $year_vars[1]
                ];
            }
        }
    }
    return $years;
}
Пример 9: Отображение заголовков последних 20 постов
 'postbypost',
    'limit'  => 20,
    'format' => 'custom',
    'before' => '',
    'after'  => ', ',
] );
?>
Пример 10: Использование пользовательских оберток на каждой ссылке
$args = array(
    'type'            => 'monthly',
    'limit'           => '',
    'format'          => 'custom',
    'before'          => '',
    'after'           => '',
    'show_post_count' => false,
    'echo'            => 1,
    'order'           => 'DESC'
);
wp_get_archives( $args );
Примечания
- Если вас интересуют детали работы функции 
get_archives_link(), вы можете посмотреть её документацию. - Используются глобальные объекты: 
$wpdb(для работы с базой данных) и$wp_locale(для локализации даты и времени). 
Изменения в версии
- С 1.2.0: Введена функция.
 - С 4.4.0: Добавлен аргумент 
$post_type. - С 5.2.0: Добавлены аргументы 
$year,$monthnum,$dayи$w. 
Теперь у вас есть все необходимые данные для использования функции wp_get_archives() в WordPress!