C'è un modo per usare $ query-> set ('tax_query' nel filtro pre_get_posts?


16

C'è un modo di usare $query->set('tax_query', ...)nel pre_get_postsfiltro? ad esempio il codice successivo non modifica la query. Nota che sto costruendo $ tassonomie da e ricerca personalizzata.

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 );

Grazie in anticipo.


1
Perché stai passando un WP_Queryoggetto in un metodo di impostazione dell'argomento?
t31os,

Sì, mi sbagliavo, ora l'ho ottenuto usando eval per convertire la stringa in un array (e sono davvero sicuro che la stringa sia sicura). Grazie.
José Pablo Orozco Marín,

Risposte:


35

La $queryvariabile nel filtro rappresenta un WP_Queryoggetto, quindi non dovresti passare un nuovo WP_Queryoggetto nel metodo per impostare le proprietà dell'oggetto.

La domanda da cui hai copiato il codice stava usando erroneamente il filtro, che ritengo sia il punto cruciale del tuo problema.

Sì, tax_querypuò essere utilizzato all'interno di un filtro / azione pre_get_posts(o allo stesso modo parse_request).

Ecco un esempio:
specifica una tassonomia personalizzata per le query di ricerca

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' );

6
potresti dare un esempio pratico di impostazione di tax_query all'interno di un'azione pre_get_posts?
Helgatheviking

$ tax_query è un oggetto che contiene un array nidificato. Non è possibile sovrascrivere l'oggetto con un array nidificato.
AlxVallejo,

3
$tax_querynon è un oggetto, $queryè però (è un'istanza di WP_Query).
t31os,

2
questo non sostituisce completamente il tax_query? $ taxquery non dovrebbe essere aggiunto ai dati correnti nell'argomento tax_query?
hot_barbara,

@hot_barbara così com'è, sovrascriverebbe il tax_query. Questa versione aggiungerebbe invece la query corrente: $ taxquery = array ('relationship' => 'OR', array ('taxonomy' => 'career_event_type', 'field' => 'id', 'terms' => array ( 52), 'operator' => 'NOT IN'));
rambillo

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.