Gibt es eine Möglichkeit, $ query-> set ('tax_query' im pre_get_posts-Filter zu verwenden?

16

Gibt es eine Möglichkeit, $query->set('tax_query', ...)in pre_get_postsFilter zu verwenden? Beispielsweise ändert der nächste Code die Abfrage nicht. Beachten Sie, dass ich $ taxonomies von und benutzerdefinierte Suche erstelle.

function custom_search_filter($query) {
        ...

        // array('taxonomy' => 'category', 'field' => 'id', 'terms' => array( 41,42 ), 'operator' => 'IN')
        $taxonomies = implode(',', $taxonomy_arr);

        // /wordpress/25076/how-to-filter-wordpress-search-excluding-post-in-some-custom-taxonomies

        $taxonomy_query = array('relation' => 'AND', $taxonomies);

        $query->set('tax_query', $taxonomy_query);
    }

    return $query; 
}


add_filter( 'pre_get_posts', 'custom_search_filter', 999 );

Danke im Voraus.

José Pablo Orozco Marín
quelle
1
Warum übergeben Sie ein WP_QueryObjekt an eine Methode zum Festlegen von Argumenten?
t31os
Ja, ich habe mich geirrt, jetzt habe ich eval verwendet, um den String in ein Array zu konvertieren (und ich bin mir wirklich sicher, dass der String sicher ist). Vielen Dank.
José Pablo Orozco Marín

Antworten:

34

Die $queryVariable im Filter stellt ein WP_QueryObjekt dar, daher sollten Sie kein neues WP_QueryObjekt an die Methode zum Festlegen der Eigenschaften dieses Objekts übergeben.

Die Frage, von der Sie Code kopiert haben , hat den Filter falsch verwendet. Ich bin der Meinung, dass dies der Kern Ihres Problems ist.

Ja, tax_querykann in einem pre_get_posts(oder ähnlichen parse_request) Filter / einer Aktion verwendet werden.

Hier ein Beispiel:
Geben Sie eine benutzerdefinierte Taxonomie für Suchanfragen an

function search_filter_get_posts($query) {
    if ( !$query->is_search )
        return $query;

    $taxquery = array(
        array(
            'taxonomy' => 'career_event_type',
            'field' => 'id',
            'terms' => array( 52 ),
            'operator'=> 'NOT IN'
        )
    );

    $query->set( 'tax_query', $taxquery );

}
add_action( 'pre_get_posts', 'search_filter_get_posts' );
t31os
quelle
6
Können Sie ein funktionierendes Beispiel für das Setzen der tax_query in einer pre_get_posts-Aktion geben?
helgatheviking
$ tax_query ist ein Objekt, das ein verschachteltes Array enthält. Sie können das Objekt nicht mit einem verschachtelten Array überschreiben.
AlxVallejo
3
$tax_queryist kein Objekt, $queryist aber (es ist eine Instanz von WP_Query).
T31OS
2
Überschreibt dies nicht vollständig die tax_query? Sollte $ taxquery nicht an die aktuellen Daten im Argument tax_query angehängt werden?
hot_barbara