Pre_get_posts filtresinde $ query-> set ('tax_query' kullanmanın bir yolu var mı?


16

Kullanım için bir yol gidecekseniz $query->set('tax_query', ...)de pre_get_postsfiltrenin? örneğin sonraki kod sorguyu değiştirmiyor. $ Taksonomileri oluşturduğumu ve özel arama yaptığımı unutmayın.

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

Şimdiden teşekkürler.


1
Neden bir WP_Querynesneyi bağımsız değişken ayarlama yöntemine geçiriyorsunuz?
t31os

Evet yanlıştı, şimdi i dizeye dönüştürmek için eval kullanarak aldım (ve im gerçekten dize güvenli olduğundan emin). Teşekkürler.
José Pablo Orozco Marín

Yanıtlar:


35

$queryFiltresinde değişken bir temsil WP_QueryYeni geçen olmamalıdır böylece, nesneyi WP_Queryo nesnenin özelliklerini ayarlamak için yöntem haline nesne.

Eğer kodu kopyalanan soru yanlış hissettiğimi filtresi kullanıyordu sorununuzun dönüm noktasıdır.

Evet tax_querybir içinde kullanılabilir pre_get_posts(veya benzer parse_request) filtre / aksiyon.

İşte bir örnek:
Arama sorguları için özel bir sınıflandırma belirtme

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
tax_query öğesini bir pre_get_posts eylemi içinde ayarlamaya çalışan bir örnek verebilir misiniz?
Şubat'ta helgatheviking

$ tax_query, iç içe dizi içeren bir nesnedir. İç içe bir diziyle nesneyi geçersiz kılamazsınız.
AlxVallejo

3
$tax_querybir nesne değildir, $query(bir örneğidir WP_Query).
t31os

2
bu tax_query'yi tamamen geçersiz kılmaz mı? tax_query bağımsız değişkenindeki geçerli verilere $ taxquery eklenmemeli mi?
hot_barbara

@hot_barbara olduğu gibi, tax_query üzerine yazar. Bu sürüm geçerli sorguyu bunun yerine ekler: $ taxquery = dizi ('ilişki' => 'VEYA', dizi ('taksonomi' => 'kariyer_event_türü', 'alan' => 'id', 'terms' => dizi ( 52), 'operatör' => 'NOT IN'));
rambillo

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.