Как изменить запрос в taxonomy-custom.php для сортировки архивов терминов по пользовательскому мета-полю?
Я пытаюсь создать тематические страницы для пользовательских терминов таксономии, в которых архивы упорядочены по пользовательскому мета-полю.
Я могу сделать это с помощью нового wp_query следующим образом:
<?php $directory_archive_query = new WP_Query(
array(
'post_type' => 'directory',
'posts_per_page' => 200,
'meta_key' => 'surname',
'orderby' => 'meta_value',
'order' => 'ASC' ) ); ?>
<?php while($directory_archive_query->have_posts()) : $directory_archive_query->the_post(); ?>
Однако мне это нужно для работы над taxonomy-custom.php страница так, чтобы страница архива каждого отдельного термина таксономии была указана в соответствии с пользовательским полем "мясо" (называемым "фамилия"). Если я использую wp_query, то, конечно, это не сработает, потому что он больше не показывает результаты для каждый конкретный термин.
Я также пытался сделать это с помощью pre_get_posts, но тоже не могу заставить это работать. Я ожидаю, что все сообщения, перечисленные на странице архива терминов, будут перечислены в порядке возрастания по мета-ключу фамилии. Этого не происходит. Вместо этого они просто перечисляются в том же порядке, как если бы там не было pre_get_posts. Код, который я использовал, выглядит следующим образом:
<?php
function customize_customtaxonomy_archive_display ( $query ) {
if (($query->is_main_query()) && (is_tax('services')))
$query->set( 'post_type', 'directory' );
$query->set( 'posts_per_page', '200' );
$query->set( 'meta_key', 'surname' );
$query->set( 'orderby', 'meta_value' );
$query->set( 'order', 'ASC' );
}
add_action( 'pre_get_posts', 'customize_customtaxonomy_archive_display' );
?>
Очень надеюсь, что кто-нибудь сможет помочь.
Спасибо за ваше время.
Эндрю.
1 answers
Фильтр pre_get_posts устанавливается непосредственно перед началом цикла в
taxonomy-services.php
Это слишком поздно. Основной запрос выполняется задолго до загрузки вашего шаблона. Переместите свой фильтр pre_get_posts
в functions.php
вашей темы или в файл плагина или MU-плагина, и вы должны увидеть разницу.