Я нашел этот вопрос:
Есть способ использовать $ query-> set ('tax_query' в фильтре pre_get_posts?
что, по-видимому, указывает на то, что да, вы можете изменить запрос таксономии в архивах таксономии с помощью pre_get_posts (). так что я придумал
add_action('pre_get_posts', 'kia_no_child_terms' );
function kia_no_child_terms( $wp_query ) {
if( is_tax() ) {
$wp_query->tax_query->queries[0]['include_children'] = 0;
}
}
также как и
add_action('pre_get_posts', 'kia_no_child_terms' );
function kia_no_child_terms( $wp_query ) {
if( is_tax() ) {
$tax_query = $wp_query->get( 'tax_query' );
$tax_query->queries[0]['include_children'] = 0;
$wp_query->set( 'tax_query', $tax_query );
}
}
попытаться установить для параметра include_children значение false ... и почти каждую комбинацию из двух, которые я могу придумать. однако до сих пор в архиве таксономии все еще отображаются элементы дочернего термина
и следующий тест просто добавляет дополнительные налоговые запросы вместо того, чтобы перезаписывать их ... что просто смущает меня.
function dummy_test( $wp_query){
$tax_query = array(
'relation' => 'OR',
array(
'taxonomy' => 'tax1',
'terms' => array( 'term1', 'term2' ),
'field' => 'slug',
),
array(
'taxonomy' => 'tax2',
'terms' => array( 'term-a', 'term-b' ),
'field' => 'slug',
),
);
$wp_query->set( 'tax_query', $tax_query );
);
add_action('pre_get_posts','dummy_test');
не должен ли SET перезаписывать текущее значение?
pre-get-posts
advanced-taxonomy-queries
helgatheviking
источник
источник
Ответы:
Я знаю, что это старый вопрос, но он немного сбивает с толку и, надеюсь, поможет кому-то. Причина того, что `$ query-> set не работает, заключается в том, что запрос уже был проанализирован, и теперь нам нужно также обновить объект tax_query. Вот как я это сделал:
источник
Начиная с Wordpress 3.7
parse_tax_query
, для этой цели было добавлено новое действие с именем .Этот хук изменяет значения как query_vars, так и tax_query. Использование
pre_get_posts
метода привело к дублированию запросов таксономии, по крайней мере, для меня.До 3.7 вы должны использовать
pre_get_posts
действие вместо этого, как подробно описано в других ответах.источник
$wp_query
, использовать шаблоны тегов или оба, или какую-то другую логику, чтобы определить, должен ли запрос быть изменен в первую очередь.Я не мог заставить это работать с любой комбинацией
pre_get_posts
илиparse_query
. Я могу сделать это относительно легко, уничтожив объект запроса после его создания. Мне это не нравится, потому что тогда я выполняю запрос дважды, но я нахожусь в своем уме, пытаясь быть «эффективным».Так что, пока кто-то не придет с лучшим ответом, это единственный метод, который я нашел до сих пор.
РЕДАКТИРОВАТЬ:
Адаптировав ответ от @Tanner Moushey, я наконец смог выполнить эту работу, чтобы исключить все дочерние термины из архива таксономии на
pre_get_posts
крючке без неэффективного двойного запроса.источник
include_children
параметр черезpre_get_posts
крючок. Ах хорошо.Для тех, кто, как я, застрял в этой проблеме, я нашел что-то полезное. Я использовал систему приоритетов
Мой запрос не был включен в результат, и поиск был прерван с моими исключениями. Надеюсь, это поможет.
источник