Столкнулся с этой проблемой в проекте, но так и не нашел решения в Интернете - у меня не самый красивый PHP, но он делает свое дело.
Это игра фильтра, предложенного Кэти, с которой я также столкнулся на нескольких форумах поддержки. Это идет в вашем functions.php
:
add_filter( 'getarchives_where', 'customarchives_where' );
add_filter( 'getarchives_join', 'customarchives_join' );
function customarchives_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 customarchives_where( $x ) {
global $wpdb;
$categories = get_terms( 'taxonomy-name', 'orderby=id' );
$includeIds;
$i = 0;
foreach($categories as $category) {
if($i != 0) $includeIds .= ',';
$includeIds .= $category->term_id;
$i++;
}
return $x . " AND $wpdb->term_taxonomy.taxonomy = 'taxonomy-name'
AND $wpdb->term_taxonomy.term_id IN ($includeIds)";
}
Во второй функции поменяйте taxonomy-name
на название вашей действительной пользовательской таксономии.
Все идентификаторы терминов в вашей пользовательской таксономии записаны в строку; остальное работает так же, как и в исходной функции - в список wp_get_archives()
включен только тот список категорий из вашей пользовательской таксономии. Вы также можете настроить код, чтобы исключить их (первый пример выше).
Если вы хотите, чтобы это делал только один экземпляр списка wp_get_archives()
, просто пропустите две верхние строки кода в functions.php
, которые применяют фильтры. Затем, когда вы используете тег wp_get_archives()
, примените фильтры перед ним, а затем удалите их:
<?php
add_filter( 'getarchives_where', 'customarchives_where' );
add_filter( 'getarchives_join', 'customarchives_join' );
wp_get_archives();
remove_filter( 'getarchives_where', 'customarchives_where' );
remove_filter( 'getarchives_join', 'customarchives_join' );
?>