শিশু শুল্কের আইটেমগুলি বাদ দেওয়ার জন্য বিভাগের পৃষ্ঠাগুলি সংশোধন করুন


18

আমি এই প্রশ্নটি পেয়েছি:

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

যা মনে করে যে হ্যাঁ, আপনি প্রাক_আর_পোস্টগুলি () এর মাধ্যমে কর বিভাগের সংরক্ষণাগারগুলিতে কর বিভাগের ক্যোয়ারীটি পরিবর্তন করতে পারেন। তাই আমি সাথে এসেছি

add_action('pre_get_posts', 'kia_no_child_terms' );

function kia_no_child_terms( $wp_query ) {  
  if( is_tax() ) {
     $wp_query->tax_query->queries[0]['include_children'] = 0;
  }
}

পাশাপাশি

add_action('pre_get_posts', 'kia_no_child_terms' );

function kia_no_child_terms( $wp_query ) {
   if( is_tax() ) {
        $tax_query = $wp_query->get( 'tax_query' );
        $tax_query->queries[0]['include_children'] = 0;
    $wp_query->set( 'tax_query', $tax_query );  
    }    
}

অন্তর্ভুক্ত_স্কাইল্ডেন প্যারামিটারটিকে মিথ্যাতে সেট করার চেষ্টা করার জন্য ... এবং আমি যে দুটি ভাবতে পারি তার প্রতিটি সংমিশ্রণ সম্পর্কে। এখনও অবধি, বিভাগীয় সংরক্ষণাগারটি এখনও আইটেমগুলি শিশু শর্তে দেখাচ্ছে

এবং নিম্নলিখিত পরীক্ষায় অতিরিক্ত ট্যাক্স ক্যোয়ারীগুলি ওভাররাইট করার পরিবর্তে কেবলমাত্র যুক্ত করা হবে ... যা আমাকে বিভ্রান্ত করে।

function dummy_test( $wp_query){
$tax_query = array(
             'relation' => 'OR',
             array(
               'taxonomy' => 'tax1',
               'terms' => array( 'term1', 'term2' ),
               'field' => 'slug',
             ),
             array(
               'taxonomy' => 'tax2',
               'terms' => array( 'term-a', 'term-b' ),
               'field' => 'slug',
             ),
           );


$wp_query->set( 'tax_query', $tax_query );

);
add_action('pre_get_posts','dummy_test');

বর্তমান মানটি ওভাররাইট করে SET করা উচিত নয়?


দয়া করে এই উত্তরটি একবার দেখুন । এটি আপনাকে আরও সামনে নিয়ে আসা উচিত।
কায়সার

ধন্যবাদ, তবে আমি যা চেষ্টা করেছি তা অনেকটাই। _ wp_query গ্লোবালের var_dumps / মুদ্রণ_আর কমপক্ষে আমার ট্যাক্সনোমি পৃষ্ঠায় ... পরিবর্তে বিদ্যমান ক্যোয়ারী ছাড়াও সেই নতুন কর কোয়েরিটি দেখায়।
হেলগাটিভিকিং

হ্যাঁ, এই কোডটি ক্যোয়ারিতে যুক্ত করা।
কায়সার

সুতরাং বিদ্যমান ক্যোয়ারী সামঞ্জস্য / ওভাররাইড করার কোনও উপায় নেই? বি / সি আমি যা চাই তা হল
শিশুদের

উত্তর:


22

আমি জানি এটি একটি পুরানো প্রশ্ন, তবে এটি কিছুটা বিভ্রান্তিকর এবং আশা করি যে কাউকে সহায়তা করবে। $ $ ক্যোয়ারী-> সেটটি কাজ না করার কারণটি হ'ল ক্যোয়ারীটি ইতিমধ্যে পার্স করা হয়েছে এবং এখন আমাদের ট্যাক্স_কোয়ারী অবজেক্টটিও আপডেট করতে হবে। আমি এটি কীভাবে করেছি তা এখানে:

function my_tax_query( $query ) {
    $package_id = 12345;
    $tax_query = array(
        'taxonomy' => 'package_id',
        'terms'    => array( $package_id ),
        'field'    => 'slug',
        'operator' => 'IN',
    );
    $query->tax_query->queries[] = $tax_query; 
    $query->query_vars['tax_query'] = $query->tax_query->queries;
}
add_action( 'pre_get_posts', 'my_tax_query' );

মিষ্টি !! আমি এটি পরীক্ষা করে দেখেছি এবং সমস্ত কোডের জন্য আপনার কোডটি অভিযোজিত করতে সক্ষম হয়েছিল, এটিই আসল প্রশ্ন। +1 (আমি পারলে আপনাকে আরও উচ্চতর প্রস্তাব দিতে চাই)
হেলগাটিভিকিং

আমি অবাক হয়েছি এবং আশ্বস্ত হয়েছি যে এই পদ্ধতিটি তারিখের প্রশ্নের জন্যও কাজ করে।
ডেভিড

14

ওয়ার্ডপ্রেস 3.7 হিসাবে এই নতুন parse_tax_queryউদ্দেশ্যে ঠিক একটি নতুন ক্রিয়া যুক্ত করা হয়েছিল।

function kia_no_child_terms($wp_query) {  
  $wp_query->tax_query->queries[0]['include_children'] = 0;
}
add_action('parse_tax_query', 'kia_no_child_terms');

এই হুক ক্যোয়ারী_ভারস এবং ট্যাক্স_কোয়ারি উভয়ের মানকে পরিবর্তন করে। ব্যবহার pre_get_postsপদ্ধতি সদৃশ বর্গীকরণ সূত্র প্রশ্নের ফলে, অন্তত আমার জন্য।

৩.7 এর পূর্বে আপনাকে অবশ্যই এর pre_get_postsপরিবর্তে অ্যাকশনটি ব্যবহার করতে হবে , অন্যান্য উত্তরগুলিতে যেমন বিশদ রয়েছে।


আমার ক্ষেত্রে, এটি কিছুটা দূরে পৌঁছেছে বলে মনে হচ্ছে এবং এর অযৌক্তিক পার্শ্ব-প্রতিক্রিয়া রয়েছে ... এটি আমার নেভিগেশনের সাবমিনাসটি প্রদর্শিত হতে বাধা দেয়।
মনু

2
@ মানু - আপনি সম্পূর্ণ সঠিক প্রদত্ত উদাহরণটি খুব সরলীকৃত এবং কেবল প্রাসঙ্গিক ভেরিয়েবলগুলি দেখায়। একটি বাস্তব জীবনের দৃশ্যে আপনি $wp_queryঅনুসন্ধানটি প্রথম স্থানে পরিবর্তন করতে হবে কিনা তা নির্ধারণ করতে আপনি টেমপ্লেট ট্যাগ বা উভয়, বা অন্য কোনও যুক্তি ব্যবহার করতে পারবেন ।
leepowers

5

pre_get_postsবা এর কোনও সংমিশ্রণে আমি এটি কাজ করতে পারি না parse_query। কোয়েরি অবজেক্টটি তৈরি হওয়ার পরে মুছে ফেলা দিয়ে আমি তুলনামূলকভাবে সহজেই এটি করতে পারি। আমি এটি পছন্দ করি না কারণ এরপরে আমি দু'বার ক্যোয়ারী চালাচ্ছি, তবে "দক্ষ" হওয়ার চেষ্টা করে আমি আমার বুদ্ধিমানের শেষে।

function kia_no_child_taxonomies(){

    if(is_tax()){
        $args = array(
            'tax_query' => array(
                array(
                    'taxonomy' => get_query_var('taxonomy'),
                    'field' => 'slug',
                    'terms' => get_query_var('term'),
                    'include_children' => FALSE
                )
            )
        );
        query_posts($args); 
    }
}

 add_action('wp','kia_no_child_taxonomies');

সুতরাং যতক্ষণ না কেউ আরও ভাল উত্তর নিয়ে আসে, আমি এখন পর্যন্ত এটি খুঁজে পেয়েছি।

সম্পাদনা করুন:

@ ট্যানার মুশি থেকে উত্তরটি অভিযোজিত করে, অবশেষে আমি pre_get_postsঅদক্ষ ডাবল-কোয়েরি ছাড়াই হুকের উপরের সমস্ত করণীয় শৈলীটি হুকের আর্কিভেক থেকে বাদ দেওয়ার জন্য এই কাজটি করতে সক্ষম হয়েছি ।

function kia_no_child_taxonomies( $query ) {

    if( is_tax() ):

    $tax_obj = $query->get_queried_object();

   $tax_query = array(
                    'taxonomy' => $tax_obj->taxonomy,
                    'field' => 'slug',
                    'terms' => $tax_obj->slug,
                    'include_children' => FALSE
            );
   $query->tax_query->queries[] = $tax_query;
   $query->query_vars['tax_query'] = $query->tax_query->queries;

   endif;

}
add_action( 'pre_get_posts', 'kia_no_child_taxonomies' );

এটা ভুল. আপনি ক্যোয়ারী_পোস্টগুলি ব্যবহার করবেন না, এর পরিবর্তে প্রাক_সেট_পোস্টগুলি বা অনুরোধ করবেন না।
কোভসেনিন

এটা সহায়ক নয়। কেন কোনও উত্তর পোস্ট করবেন না যদি আপনি যদি এই মুহুর্তে প্রাক_জেট_পোস্টগুলি কীভাবে কাজ করতে জানেন তবে? আমি অবশ্যই আমার প্রশ্নটিতে পোস্ট করেছি যে আমি এটি চেষ্টা করেছি, কিন্তু এই সিদ্ধান্তে পৌঁছেছি যে আপনি সেই ফিল্টারটির মাধ্যমে ট্যাক্স_কিউরি আইটেমটি সংশোধন করতে পারবেন না
হেলগাথভিয়েক

দুঃখিত, আরও সহায়ক হওয়া উচিত ছিল। সুতরাং প্রকৃত কর কোয়েরিটি তৈরি করা হয়েছে (পার্স_ট্যাক্স_কোয়রি দিয়ে) প্রাক_জেট_পোস্টগুলি সরিয়ে দেওয়ার পরে, এবং একটি আসল ডাব্লুপিটাক্স_কুইয়ারিতে, যেখানে ক্যোয়ারী ভেরিয়েবলগুলি (ট্যাক্স_কোয়ারি ক্যোয়ারী সহ) সমস্ত মিলিত করের ক্যোয়ারী রয়েছে তাই আপনার ক্ষেত্রে এটি আপনার ট্যাক্স_কোয়ারি কোয়েরি ভ্যারিকে পার্স করছে এবং তারপরে কোয়েরি ওয়ার্স, যেমন বিভাগ, ট্যাগ_ইন এবং অন্যদের মাধ্যমে যা কিছু পাওয়া যায় তা যুক্ত করা। আপনি নিজের যুক্ত করার আগে বিদ্যমান ক্যোয়ারী ভারগুলি অপসারণ করতে pre_get_posts ব্যবহার করতে পারেন।
কোভসেনিন

আরও ভাল ব্যাখ্যার জন্য ধন্যবাদ। স্পষ্টতই এটি পুরানো, তাই আমি যে সমাধানটি দিয়েছিলাম তা নিয়ে এগিয়ে গেলাম। আমি কখনওই হুকের include_childrenমাধ্যমে প্যারামিটারটি সংশোধন করতে সক্ষম হইনি pre_get_posts। আহ ভালো.
হেলগাটিভিকিং

হ্যাঁ আমি বুঝতে পেরেছি, অনেক দিন ধরে এখানে নেই;)
কোভসেনিন

2

যারা আমার পছন্দ করেন তারা এই সমস্যাটিতে আটকে ছিলেন, আমি দরকারী কিছু পেয়েছি। আমি অগ্রাধিকার সিস্টেমটি ব্যবহার করেছি

    function kia_no_child_taxonomies( $query ) {

if( is_tax() ):

$tax_obj = $query->get_queried_object();
$tax_query = array(
                'taxonomy' => $tax_obj->taxonomy,
                'field' => 'slug',
                'terms' => $tax_obj->slug,
                'include_children' => FALSE);
$query->tax_query->queries[] = $tax_query;
$query->query_vars['tax_query'] = $query->tax_query->queries;
return $query;
endif;

}
 add_action( 'pre_get_posts', 'kia_no_child_taxonomies',0 );

আমার ক্যোয়ারীটি ফলাফলটিতে অন্তর্ভুক্ত ছিল না এবং অনুসন্ধানগুলি আমার ব্যতিক্রম সহ ভেঙে গেছে। আশা করি এটি সাহায্য করবে।

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