web-dev-qa-db-ger.com

Wie füge ich Taxonomiefilter während der Abfrage hinzu?

Ich versuche, eine Steuerabfrage für den Hook pre_get_posts mit folgendem Code hinzuzufügen:

    // Add custom posts to main query (archive and home)
add_action( 'pre_get_posts', 'add_post_types_to_query' );

function add_post_types_to_query( $query ) {
    if ( (is_home() || is_category() || is_search()) && $query->is_main_query() && !is_admin() )
    {
        // Query all posts on index and category pages
        $query->set( 'post_type', array( 'post', 'page', 'definition', 'video', 'data_vizualization', 'quizz', 'talk', 'question', 'study', 'bibliography' ) );

        $workspace_taxonomy_query =
                    array(array(
                        'taxonomy ' =>  'workspace',
                        'field'     =>  'slug',
                        'terms'     =>  array('particulier'),
                        'operator'  =>  'IN'
                    ));
        $query->tax_query->queries[] = $workspace_taxonomy_query;
        $query->set( 'tax_query', $workspace_taxonomy_query);
    }
    return $query;
}

Dieser Code gibt die folgende where-Klausel an: "0 = 1". Was ist falsch? Ist das der gute Haken? Wie kann ich Taxonomiefilter richtig hinzufügen, bevor die Hauptabfrage durchgeführt wird?

Vielen Dank im Voraus für Antworten!

6
Nicolas BONNIOT

Sie haben einen Syntaxfehler oder einen Rechtschreibfehler. In Ihrem tax_query-Array steht nach "taxonomy" ein Leerzeichen. Wenn das die Summe wäre, hätte ich gerade einen Kommentar gepostet, aber zusätzlich ist diese $query->tax_query->queries[] = $workspace_taxonomy_query;-Zeile sinnlos. Nichts ändert sich mit oder ohne. Versuchen Sie nicht, das Array so zu hacken. Verwenden Sie einfach $query->set( 'tax_query', $workspace_taxonomy_query); wie folgt (unter Verwendung einer Taxonomie und eines Begriffs, die in meiner Testumgebung vorhanden sind):

// Add custom posts to main query (archive and home)
add_action( 'pre_get_posts', 'add_post_types_to_query' );

function add_post_types_to_query( $query ) {
    if ( (is_home() || is_category() || is_search()) && $query->is_main_query() && !is_admin() )
    {
        // Query all posts on index and category pages
        $query->set( 'post_type', array( 'post', 'page', 'definition', 'video', 'data_vizualization', 'quizz', 'talk', 'question', 'study', 'bibliography' ) );

        $workspace_taxonomy_query =
                    array(
                      array(
                        'taxonomy' =>  'post_tag',
                        'field'     =>  'slug',
                        'terms'     =>  array('test-4'),
                        'operator'  =>  'IN'
                      )
                    );
        $query->tax_query->queries[] = $workspace_taxonomy_query;

    }
    return $query;
}
3
s_ha_dum