มีวิธีใช้ $ query-> set ('tax_query' ในตัวกรอง pre_get_posts หรือไม่


16

มีวิธีใช้$query->set('tax_query', ...)ในpre_get_postsตัวกรองหรือไม่? เช่นรหัสต่อไปไม่ได้เปลี่ยนการสืบค้น โปรดทราบว่าฉันกำลังสร้าง $ taxonomies จากและการค้นหาที่กำหนดเอง

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 เพื่อแปลงสตริงเป็นอาร์เรย์ (และฉันแน่ใจจริงๆว่าสตริงนั้นปลอดภัย) ขอบคุณ
José Pablo Orozco Marín

คำตอบ:


35

$queryตัวแปรในตัวกรองหมายถึงWP_Queryวัตถุดังนั้นคุณจึงไม่ควรจะผ่านใหม่WP_Queryวัตถุเข้าสู่วิธีการในการตั้งค่าคุณสมบัติของวัตถุนั้น

คำถามที่คุณคัดลอกโค้ดจากถูกไม่ถูกต้องโดยใช้ตัวกรองซึ่งฉันรู้สึกเป็นปมของปัญหาของคุณ

ใช่tax_queryสามารถใช้ภายในตัวกรอง / หรือการกระทำpre_get_posts(หรือทำนองเดียวกันparse_request)

นี่คือตัวอย่าง:
ระบุ taxonomy แบบกำหนดเองสำหรับเคียวรีการค้นหา

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 ภายในการกระทำ pre_get_posts ได้หรือไม่?
helgatheviking

$ tax_query เป็นวัตถุที่มีอาร์เรย์ที่ซ้อนกัน คุณไม่สามารถแทนที่วัตถุด้วยอาร์เรย์ที่ซ้อนกัน
AlxVallejo

3
$tax_queryไม่ใช่วัตถุ$queryแต่เป็น (เป็นตัวอย่างของWP_Query)
t31os

2
สิ่งนี้ไม่ได้แทนที่ tax_query อย่างสมบูรณ์หรือ ไม่ควร $ taxquery ผนวกเข้ากับข้อมูลปัจจุบันใน tax_query arg หรือไม่
hot_barbara

@hot_barbara ตามที่ตั้งไว้มันจะเขียนทับ tax_query รุ่นนี้จะผนวกการสืบค้นปัจจุบันแทน: $ taxquery = array ('ความสัมพันธ์' => 'OR', อาร์เรย์ ('taxonomy' => 'career_event_type', 'field' => 'id', 'terms' => array ( 52) 'โอเปอเรเตอร์' => 'ไม่ได้อยู่ใน'));
แรมโบลโล

2

แบบสอบถามภาษีต้องการให้คุณตั้งค่าออบเจ็กต์ tax_query ในแบบสอบถามเนื่องจากแบบสอบถามได้ถูกแยกวิเคราะห์แล้ว ดูคำตอบของฉันสำหรับหน้าปรับเปลี่ยนอนุกรมวิธานที่จะไม่รวมรายการใน taxonomies

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.