WP_Query এর সাথে pre_get_posts ব্যবহার করা


24

আমি পড়া ছিল স্টিফেন হ্যারিস থেকে এর চমৎকার উত্তর এই প্রশ্ন ব্যবহার সংক্রান্ত WP_query(), query_posts()এবং pre_get_posts

তিনি বলেছেন যে "pre_get_posts হ'ল একটি ফিল্টার, যে কোনও পরিবর্তন করার জন্য ক্যোয়ারী ।

শুধুমাত্র একটি নির্দিষ্ট গৌণ ক্যোয়ারী দিয়ে তৈরি pre_get_postsকরা ফিল্টার করা সম্ভব ? যেমন।WP_Query

$my_secondary_loop = new WP_Query(...);
if( $my_secondary_loop->have_posts() ):
    while( $my_secondary_loop->have_posts() ): $my_secondary_loop->the_post();
       //The secondary loop
    endwhile;
endif;
wp_reset_postdata();

যে কোনও সহায়তা অনেক প্রশংসিত।

উত্তর:


23

সহজ উপায় হ'ল ক্যোয়ারির ঠিক আগে ক্রিয়াটি যুক্ত করা এবং এরপরে তা সরিয়ে ফেলা

add_action('pre_get_posts', 'some_function_in_functionsphp');
$my_secondary_loop = new WP_Query(...);
remove_action('pre_get_posts', 'some_function_in_functionsphp');

if( $my_secondary_loop->have_posts() ):
    while( $my_secondary_loop->have_posts() ): $my_secondary_loop->the_post();
       //The secondary loop
    endwhile;
endif;
wp_reset_postdata();

সম্পাদনা

আর একটি কৌশল যা আপনি ব্যবহার করতে পারেন তা হ'ল আপনার নিজের ক্যোয়ারী ভার সেট করে হুকের জন্য এটি পরীক্ষা করা:

// tell WordPress about our new query var
function wpse52480_query_vars( $query_vars ){
    $query_vars[] = 'my_special_query';
    return $query_vars;
}
add_filter( 'query_vars', 'wpse52480_query_vars' );

// check if our query var is set in any query
function wpse52480_pre_get_posts( $query ){
    if( isset( $query->query_vars['my_special_query'] ) )
        // do special stuff

    return $query;
}
add_action( 'pre_get_posts', 'wpse52480_pre_get_posts' );

এবং টেমপ্লেটে:

// set the query var (along with whatever others) to trigger the filter
$args = array(
    'my_special_query' => true
);
$my_secondary_loop = new WP_Query( $args );

অনেক ধন্যবাদ মিলো। এটি সত্যই খুব সহায়ক। আমি সর্বদা ভাবতাম যে আপনার নিজের ক্যোয়ারী ভার সেট করা সম্ভব কিনা।
বেন পিয়ারসন

সংরক্ষণাগার পৃষ্ঠার জন্য আমি কীভাবে এই কৌশলটি ব্যবহার করতে পারি? সংরক্ষণাগার পৃষ্ঠার জন্য আমি পুরো ক্যোয়ারীটি আবার লিখতে চাই না তবে এই কৌশলটি ব্যবহার করতে চাই।
রোহিত পান্ডে

4

pre_get_posts প্রতিটি পোস্ট ক্যোয়ারির জন্য আগুন:

  • get_posts ()
  • নতুন WP_Query ()
  • সেই এলোমেলো সাম্প্রতিক পোস্টগুলি আপনার ক্লায়েন্টকে আপনার অজান্তেই ইনস্টল করা হয়েছে wid
  • সব

- @ নাকিন

যা বলা হচ্ছে আপনি যদি না আপনার ফিল্টারটি শর্তসাপেক্ষে ব্যবহার না করেন: is_main_query()তবে আপনার ফিল্টারটি আপনার নতুন WP_Query এ আগুন লাগবে।

আপনি যদি কেবলমাত্র আপনার নির্দিষ্ট নতুন WP_Query কে লক্ষ্য করতে চান তবে তা করার কোনও উপায় নেই।


মিলোর কৌশল সম্পর্কে কী? আমি এর আগে কখনও দেখিনি ...
ব্রাসোফিলো

তার কৌশলটি কাজ করবে। IV কখনও এটি pre_get_posts এর জন্য ব্যবহার করেনি তবে পোস্ট_এর মতো অন্যান্য ফিল্টারগুলির জন্য রয়েছে
ক্রিস_ও

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