$ क्वेरी-> सेट ('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

हाँ, मैं गलत था, अब मैंने इसे स्ट्रिंग में बदलकर सरणी में बदलने के लिए (और वास्तव में यकीन है कि स्ट्रिंग सुरक्षित है) का उपयोग करके इसे प्राप्त किया। धन्यवाद।
जोस पाब्लो ओरोज़्को मारिन

जवाबों:


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
क्या आप पहले से तय किए गए एक्शन के लिए टैक्स_क्वेरी सेट करने का कार्य उदाहरण दे सकते हैं?
हेलगैथवेकिंग

$ tax_query एक ऑब्जेक्ट है जिसमें एक नेस्टेड सरणी होती है। आप किसी नेस्टेड सरणी के साथ ऑब्जेक्ट को ओवरराइड नहीं कर सकते।
AlxVallejo

3
$tax_queryएक वस्तु नहीं है, $queryहालांकि (यह एक उदाहरण है WP_Query)।
t31os

2
क्या यह पूरी तरह से tax_query को ओवरराइड नहीं करता है? क्या टैक्स_क्लेरी आर्ग में $ टैक्सक्वेरी को वर्तमान डेटा में जोड़ा नहीं जाना चाहिए?
hot_barbara

@hot_barbara जैसे ही खड़ा होता है, यह कर_लेख लिखता है। यह संस्करण वर्तमान क्वेरी को बदले में देगा: $ taxquery = array ('relation' => 'or', array ('taxonomy' => 'career_event_type', 'field' => 'id', 'terms' = 'array) ( 52), 'ऑपरेटर' => 'नॉट इन'));
रैम्बिलो

2

कर क्वेरी के लिए आपको क्वेरी में कर_क्वेरी ऑब्जेक्ट भी सेट करना होगा क्योंकि क्वेरी पहले ही पार्स हो चुकी है। चाइल्ड टैक्सोनॉमीज़ में आइटम को बाहर करने के लिए टैक्सोनॉमी पेज संशोधित करने के लिए मेरा जवाब देखें ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.