Jest sposób na użycie $ query-> set ('tax_query' w filtrze pre_get_posts?

16

Czy jest sposób na użycie $query->set('tax_query', ...)w pre_get_postsfiltrze? na przykład następny kod nie zmienia zapytania. Pamiętaj, że tworzę taksonomie $ i niestandardowe wyszukiwanie.

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

Z góry dziękuję.

José Pablo Orozco Marín
źródło
1
Dlaczego przekazujesz WP_Queryobiekt do metody ustawiania argumentów?
t31os
Tak, myliłem się, teraz wykorzystałem eval do konwersji łańcucha na tablicę (i jestem pewien, że łańcuch jest bezpieczny). Dzięki.
José Pablo Orozco Marín

Odpowiedzi:

35

$queryZmienną filtra reprezentujeWP_Query obiekt, więc nie powinno być przechodząc nowy WP_Queryobiekt do metody ustalania właściwości danego obiektu.

The Pytanie skopiowany kod został nieprawidłowo stosując filtr, który czuję jest sedno problemu.

Tak, tax_querymoże być używany wewnątrz pre_get_posts(lub podobnieparse_request filtrze / akcji ).

Oto przykład:
Określ niestandardową taksonomię dla zapytań wyszukiwania

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
źródło
6
czy możesz podać działający przykład ustawienia tax_query w akcji pre_get_posts?
helgatheviking
$ tax_query to obiekt zawierający zagnieżdżoną tablicę. Nie można przesłonić obiektu za pomocą zagnieżdżonej tablicy.
AlxVallejo
3
$tax_querynie jest przedmiotem, $queryjest jednak (jest to instancja WP_Query).
t31os
2
czy to całkowicie nie zastępuje zapytania o podatek? nie należy dodawać $ taxquery do bieżących danych w arg_ Tax_query?
hot_barbara
@hot_barbara w obecnym stanie, nadpisze zapytanie o podatek. W tej wersji zamiast tego dodawane byłoby bieżące zapytanie: $ taxquery = array ('relations' => 'OR', array ('taxonomy' => 'typ_ kariery_typowej ”,„ pole ”=>„ id ”,„ terminy ”=> tablica ( 52), „operator” => „NOT IN”));
rambillo