Функция wp_get_archives()
используется для отображения ссылок на архивы записей в WordPress на основе указанного типа и формата. Эта функция позволяет пользователям легко находить посты, организованные по времени или заголовку.
wp_get_archives( string|array $args = '' ): void|string
Возвращаемое значение
Возвращает void
, если аргумент echo
установлен в true
, или строку с архивными ссылками, если echo
установлен в false
.
Параметры
$args
(string|array): Опциональные параметры для настройки отображаемых архивов.type
(string): Тип архива. Принимает значения:daily
,weekly
,monthly
,yearly
,postbypost
,alpha
. По умолчаниюmonthly
.limit
(string|int): Ограничение на количество ссылок. По умолчанию нет ограничения.format
(string): Формат для каждой ссылки. Принимает значения:link
,option
,html
, или произвольный формат. По умолчаниюhtml
.before
(string): HTML-код для добавления перед каждой ссылкой.after
(string): HTML-код для добавления после каждой ссылки.show_post_count
(bool): Показывать ли количество постов рядом со ссылкой. По умолчаниюfalse
.echo
(bool|int): Выводить ли результат на экран или возвращать для дальнейшей обработки. По умолчаниюtrue
.order
(string): Порядок отображения. Принимает значенияASC
илиDESC
. По умолчаниюDESC
.post_type
(string): Тип записи. По умолчаниюpost
.year
,monthnum
,day
,w
: Опциональные параметры для фильтрации архива по году, месяцу, дню или неделе соответственно.
Пример 1: Архив записей по месяцам
Выводим архив записей, сгруппированных по месяцам, за последние 12 месяцев:
<?php wp_get_archives('type=monthly&limit=12'); ?>
Пример 2: Архив записей по дням
Выводим архив записей, сгруппированных по дням, за последние 7 дней:
<?php wp_get_archives('type=daily&limit=7'); ?>
Пример 3: Список последних постов
Выводим список последних 10 постов, отсортированных по заголовкам:
<?php wp_get_archives('type=postbypost&limit=10&format=custom'); ?>
Пример 4: Выпадающий список архивов по месяцам
Создаем выпадающий список архивов по месяцам с указанием количества постов за каждый месяц:
<select name="archive-dropdown" onchange="document.location.href=this.options[this.selectedIndex].value;">
<option value=""><?php esc_attr_e('Select Month', 'textdomain'); ?></option>
<?php wp_get_archives('type=monthly&format=option&show_post_count=1'); ?>
</select>
Пример 5: Алфавитный список постов
Выводим список всех постов в алфавитном порядке:
<?php wp_get_archives('type=alpha'); ?>
Пример 6: Добавление rel=nofollow
к ссылкам
Если нужно добавить rel="nofollow"
всем ссылкам из полученного списка, можно использовать следующий код:
$out = wp_get_archives('echo=0&type=postbypost&limit=3&format=html');
echo str_replace('<a', '<a rel="nofollow"', $out);
Пример 7: Фильтрация архива по категории
Чтобы отфильтровать архивные ссылки по конкретной категории, можно использовать хуки getarchives_where
и getarchives_join
. Например, если у вас есть таксономия news_category
:
add_filter('getarchives_where', 'custom_archive_by_category_where');
add_filter('getarchives_join', 'custom_archive_by_category_join');
$args = array(
'type' => 'yearly',
'format' => 'option',
'post_type' => 'news',
);
wp_get_archives($args);
remove_filter('getarchives_where', 'custom_archive_by_category_where');
remove_filter('getarchives_join', 'custom_archive_by_category_join');
Функции для фильтрации:
function custom_archive_by_category_join($x) {
global $wpdb;
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)";
}
function custom_archive_by_category_where($x) {
global $wpdb;
$current_term_slug = get_query_var('news_category');
if (!empty($current_term_slug)) {
$current_term = get_term_by('slug', $current_term_slug, 'news_category');
if (is_wp_error($current_term)) {
return $x;
}
$current_term_id = $current_term->term_id;
return $x . " AND $wpdb->term_taxonomy.taxonomy = 'news_category' AND $wpdb->term_taxonomy.term_id IN ($current_term_id)";
}
return $x;
}
Заключение
Функция wp_get_archives()
является мощным инструментом для организации и отображения архивов записей на вашем сайте WordPress. Используя различные параметры, вы можете адаптировать вывод архивов под свои нужды, облегчая пользователям навигацию по вашему контенту.