Ich habe diese Frage gefunden:
Gibt es eine Möglichkeit, $ query-> set ('tax_query' im pre_get_posts-Filter zu verwenden?
Dies scheint darauf hinzudeuten, dass Sie die Taxonomieabfrage in Taxonomiearchiven über pre_get_posts () ändern können. Also habe ich mir etwas ausgedacht
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;
}
}
ebenso gut wie
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 );
}
}
um zu versuchen, den include_children-Parameter auf false zu setzen ... und fast jede Kombination der beiden, die mir einfällt. Bisher zeigt das Taxonomiearchiv jedoch immer noch die Elemente im untergeordneten Begriff an
und der folgende Test scheint nur die zusätzlichen Steuerabfragen HINZUFÜGEN, anstatt sie zu überschreiben ... was mich nur verwirrt.
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');
soll SET den aktuellen Wert nicht überschreiben?
pre-get-posts
advanced-taxonomy-queries
helgatheviking
quelle
quelle
Antworten:
Ich weiß, dass dies eine alte Frage ist, aber sie ist etwas verwirrend und wird hoffentlich jemandem helfen. Der Grund, warum $ query-> set nicht funktioniert, ist, dass die Abfrage bereits analysiert wurde und dass wir jetzt auch das Objekt tax_query aktualisieren müssen. So habe ich es gemacht:
quelle
Ab Wordpress 3.7
parse_tax_query
wurde genau zu diesem Zweck eine neue Aktion namens hinzugefügt.Dieser Hook ändert die Werte von query_vars und tax_query. Die Verwendung der
pre_get_posts
Methode führte zu doppelten Taxonomie-Abfragen, zumindest für mich.Vor 3.7 müssen Sie
pre_get_posts
stattdessen die Aktion verwenden, wie in den anderen Antworten beschrieben.quelle
$wp_query
Vorlagen-Tags oder beides oder eine andere Logik verwenden, um zu bestimmen, ob die Abfrage überhaupt geändert werden soll.Ich konnte das mit keiner Kombination von
pre_get_posts
oder zum Laufen bringenparse_query
. Ich kann es relativ einfach tun, indem ich das Abfrageobjekt lösche, nachdem es erstellt wurde. Ich mag es nicht, weil ich die Abfrage dann zweimal durchführe, aber ich bin mit dem Versuch, "effizient" zu sein, am Ende.Bis jemand eine bessere Antwort findet, ist dies die einzige Methode, die ich bisher gefunden habe.
BEARBEITEN:
Nachdem ich die Antwort von @Tanner Moushey angepasst habe, konnte ich mit dieser Funktion endlich alle untergeordneten Begriffe aus einem Taxonomie-Archiv am
pre_get_posts
Hook ausschließen, ohne dass eine ineffiziente Doppelabfrage erforderlich war.quelle
include_children
Parameter nie über denpre_get_posts
Hook ändern . Ah, gut.Für diejenigen, die mich mögen, steckte dieses Problem fest, ich fand etwas Nützliches. Ich habe das Prioritätssystem verwendet
Meine Suchanfrage wurde nicht in das Ergebnis aufgenommen und die Suche wurde mit meinen Ausschlüssen abgebrochen. Hoffe das wird helfen.
quelle