Pre_get_posts ফিল্টারটিতে $ ক্যোয়ারী-> সেট ('ট্যাক্স_কোয়ারি') ব্যবহার করার একটি উপায় রয়েছে?


16

ব্যবহারের একটি উপায় Theres $query->set('tax_query', ...)মধ্যে pre_get_postsফিল্টার? উদাহরণস্বরূপ, পরবর্তী কোডটি কোয়েরিতে পরিবর্তন করছে না। নোট করুন যে আমি তৈরি করছি from ট্যাক্সোনমিগুলি এবং কাস্টম অনুসন্ধান থেকে।

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যে বস্তুর বৈশিষ্ট্য সেট করার জন্য পদ্ধতি মধ্যে অবজেক্ট।

আপনি যে প্রশ্ন থেকে কোডটি অনুলিপি করেছেন তা হ'ল ফিল্টারটি ভুলভাবে ব্যবহার করা হয়েছিল, যা আমি মনে করি এটি আপনার সমস্যার সমাধান of

হ্যাঁ, 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
আপনি কি একটি প্রাক_টায়_পোস্ট ক্রিয়াকলাপের ভিতরে কর_কোয়ারি সেট করার একটি কার্যকারী উদাহরণ দিতে পারেন?
হেলগাটিভিকিং

$ কর_ ক্যোয়ারি এমন একটি বস্তু যা নেস্টেড অ্যারে থাকে। আপনি নেস্টেড অ্যারে দিয়ে বস্তুকে ওভাররাইড করতে পারবেন না।
AlxVallejo

3
$tax_query$queryযদিও এটি কোনও বস্তু নয় (যদিও এটি একটি উদাহরণ WP_Query)।
t31os

2
এটি কি পুরোপুরি ট্যাক্স_কিউরিয়াকে ওভাররাইড করে না? ট্যাক্স_কোরি আর্গটিতে বর্তমান তথ্যগুলিতে ট্যাক্সকোয়ারি যুক্ত করা উচিত নয়?
হট_বারবারা

@ হট_বার্বার যেমন দাঁড়িয়ে আছে, তেমনি ট্যাক্স_উইয়ের উপরে ওভাররাইট করা হবে। পরিবর্তে এই সংস্করণটি বর্তমান ক্যোয়ারী সংযোজন করবে: $ ট্যাক্সকোয়ারি = অ্যারে ('সম্পর্ক' => 'ওআর), অ্যারে (' ট্যাক্সোনমি '=>' ক্যারিয়ার_সামগ্রী_প্রকার ',' ক্ষেত্র '=>' আইডি ',' পদ '=> অ্যারে ( 52), 'অপারেটর' => 'নট ইন'));
রামবিলো

2

ট্যাক্স ক্যোয়ারীগুলির জন্য ক্যোয়ারীটিতে ইতিমধ্যে বিশ্লেষণ করা হয়েছে বলে আপনার ট্যাক্স_কোয়ারী অবজেক্টটিও সেট করতে হবে। শিশু শুল্কের আইটেমগুলি বাদ দেওয়ার জন্য ট্যাক্সনমি পৃষ্ঠাগুলির জন্য আমার উত্তর দেখুন ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.