Є спосіб використовувати $ query-> set ('tax_query' у фільтрі pre_get_posts?


16

Є спосіб використання $query->set('tax_query', ...)у pre_get_postsфільтрі? наприклад, наступний код не змінює запит. Зауважте, що я будую таксономії $ з та користувацького пошуку.

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

Заздалегідь спасибі.


1
Чому ви передаєте WP_Queryоб'єкт методу встановлення аргументів?
t31os

Так, я помилявся, тепер я отримав це за допомогою eval для перетворення рядка в масив (і я дійсно впевнений, що рядок є безпечним). Спасибі.
Жозе Пабло Ороско Марін

Відповіді:


35

$queryЗмінний в фільтрі є WP_Queryоб'єкт, так що ви не повинні бути пропусканням нового WP_Queryоб'єкта в метод для настройки властивостей цього об'єкта.

Питання , який ви скопіювали код з неправильно з допомогою фільтра, який я відчуваю це суть вашого питання.

Так, tax_queryможна використовувати всередині фільтра pre_get_posts(або аналогічно parse_request).

Ось приклад:
Вкажіть власну таксономію для пошукових запитів

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
Ви можете навести робочий приклад встановлення податкового запиту всередині дії pre_get_posts?
helgatheviking

$ tax_query - об’єкт, який містить вкладений масив. Ви не можете замінити об'єкт вкладеним масивом.
AlxVallejo

3
$tax_queryне є об'єктом, $queryхоча (це екземпляр WP_Query).
t31os

2
це не повністю перекриває податковий запит? не слід додавати $ taxquery до поточних даних у аргументі tax_query?
hot_barbara

@hot_barbara, як зараз, це перезаписать податковий запит. Ця версія замість цього додає поточний запит: $ taxquery = array ('Relations' => 'OR', array ('таксономія' => 'karije_event_type', 'field' => 'id', 'terms' => масив ( 52), 'operator' => 'NOT IN'));
rambillo

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.