WP_GET_ARCHIVES(): Отображение ссылок на архивы постов

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_where
  • getarchives_join
  • the_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!

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *