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.