Znalazłem to pytanie:
Jest sposób na użycie $ query-> set ('tax_query' w filtrze pre_get_posts?
co wydaje się wskazywać, że tak, można zmienić zapytanie dotyczące taksonomii w archiwach taksonomii za pomocą pre_get_posts (). więc wymyśliłem
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;
}
}
jak również
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 );
}
}
aby spróbować ustawić parametr include_children na false ... i prawie każdą kombinację tych dwóch, o których mogę myśleć. jak dotąd jednak w archiwum taksonomii nadal są wyświetlane elementy z okresu potomnego
a następujący test wydaje się DODAWAĆ dodatkowe zapytania podatkowe zamiast nadpisywać je ... co mnie tylko myli.
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');
czy SET nie powinien zastąpić bieżącej wartości?
pre-get-posts
advanced-taxonomy-queries
helgatheviking
źródło
źródło
Odpowiedzi:
Wiem, że to stare pytanie, ale jest trochę mylące i mam nadzieję, że komuś pomoże. Powodem, dla którego `$ query-> set nie działa, jest to, że zapytanie zostało już przeanalizowane i teraz musimy również zaktualizować również obiekt tax_query. Oto jak to zrobiłem:
źródło
Począwszy od Wordpress 3.7,
parse_tax_query
właśnie w tym celu dodano nową akcję o nazwie .Ten hak modyfikuje wartości zarówno kwerendy_podstawowej, jak i kwerendy podatkowej. Zastosowanie tej
pre_get_posts
metody spowodowało zduplikowanie zapytań taksonomicznych, przynajmniej dla mnie.Przed wersją 3.7 musisz użyć
pre_get_posts
akcji, jak opisano w innych odpowiedziach.źródło
$wp_query
, użyć tagów szablonów lub obu, lub innej logiki, aby ustalić, czy zapytanie powinno zostać zmodyfikowane w pierwszej kolejności.Nie mogłem tego uruchomić z żadną kombinacją
pre_get_posts
lubparse_query
. Mogę to zrobić stosunkowo łatwo, usuwając obiekt zapytania po jego utworzeniu. Nie podoba mi się to, ponieważ wtedy uruchamiam zapytanie dwa razy, ale dowiaduję się, że staram się być „wydajny”.Więc dopóki ktoś nie przyjdzie z lepszą odpowiedzią, jest to jedyna metoda, jaką do tej pory znalazłem.
EDYTOWAĆ:
Dostosowując odpowiedź @Tanner Moushey, w końcu udało mi się to zrobić, aby wykluczyć wszystkie terminy potomne z archiwum systematyki na
pre_get_posts
haku bez niewydajnego podwójnego zapytania.źródło
include_children
parametru za pomocąpre_get_posts
haka. Ach tak.Dla tych, którzy tak jak ja utknęli z tym problemem, znalazłem coś przydatnego. Użyłem systemu priorytetów
Moje zapytanie nie zostało uwzględnione w wyniku, a wyszukiwanie zostało zerwane z moimi wykluczeniami. Mam nadzieję, że to pomoże.
źródło