সর্বাধিক উত্সাহিত উত্তর হিসাবে দেরী করা উত্তর আপনার ক্যোয়ারীটিকে ভেঙে দেবে এবং কিছু প্রধান পয়েন্টগুলিতে কেবল এটি সত্য নয়।
প্রধান WP_Query এবং এটি এর ফিল্টার
প্রথমত, ওয়ার্ডপ্রেস অভ্যন্তরীণভাবে ব্যবহার query_posts()(কাছাকাছি একটি পাতলা মোড়কের WP_Queryযে করা উচিত নয় থিম বা প্লাগিন ব্যবহার করা) একটি করতে WP_Query। এটি WP_Queryপ্রধান লুপ / ক্যোয়ারী হিসাবে কাজ করছে। প্রকৃত এসকিউএল কোয়েরি স্ট্রিংটি তৈরি না হওয়া পর্যন্ত এই ক্যোয়ারী প্রচুর ফিল্টার এবং ক্রিয়া চলবে। এর মধ্যে অন্যতম pre_get_posts। অন্যরা হয় posts_clauses, posts_whereইত্যাদি যে এছাড়াও আপনি কোয়েরি স্ট্রিং ভবন প্রক্রিয়া ব্যাহত করার অনুমতি দেয়।
মূল অভ্যন্তরে কি ঘটে তার গভীরতার সাথে নজর দিন
ওয়ার্ডপ্রেস wp()ফাংশনটি চালায় (ইন wp-includes/functions.php), যা কল করে $wp->main()( $wpক্লাস ডাব্লুপি এর একটি বিষয়, যা সংজ্ঞায়িত হয় wp-includes/class-wp.php)। এটি ওয়ার্ডপ্রেসকে বলে:
- URL টি একটি কোয়েরি স্পেসিফিকেশন ব্যবহার করে পার্স করুন
WP->parse_request()- নীচের অংশে আরও।
- কন্ডিশনাল ট্যাগ ব্যবহার করে সমস্ত is_ ভেরিয়েবল সেট করুন
$wp_query->parse_query()( $wp_queryএটি একটি বিষয় class WP_Queryযা এর মধ্যে সংজ্ঞায়িত হয় wp-includes/query.php)। নোট করুন যে এই ফাংশনটির নাম সত্ত্বেও, এই ক্ষেত্রে WP_Query->parse_queryআসলে আমাদের জন্য কোনও পার্সিং করে না, যেহেতু এটি আগে হাতে করা হয়েছিল WP->parse_request()।
- কোয়েরি স্পেসিফিকেশনটিকে একটি মাইএসকিউএল ডাটাবেস ক্যোয়ারিতে রূপান্তর করুন এবং ডাব্লুপি_কিউয়ারি-> গেট_পোস্টগুলি () ফাংশনে পোস্টের তালিকা পেতে ডাটাবেস ক্যোয়ারী চালান। ওয়ার্ডপ্রেস লুপে ব্যবহার করার জন্য পোস্টগুলিকে $ wp_query অবজেক্টে সংরক্ষণ করুন।
উত্স কোডেক্স
উপসংহার
আপনি যদি সত্যিই মূল ক্যোয়ারীটি সংশোধন করতে চান তবে আপনি বিভিন্ন ধরণের ফিল্টার ব্যবহার করতে পারেন। কেবলমাত্র সেখানে ডেটা পরিবর্তন$query->set( 'some_key', 'some_value' ); করতে ব্যবহার করুন বা শর্তাধীন চেক করতে ডেটা পুনরুদ্ধার করতে ব্যবহার করুন । আপনি কেবল এসকিউএল কোয়েরি পরিবর্তন করছেন বলে এটি আপনাকে দ্বিতীয় ক্যোয়ারী করা থেকে বাঁচাবে will$query->get( 'some_key' );
যদি আপনার অতিরিক্ত কোয়েরি করতে হয় তবে কোনও WP_Queryবস্তুর সাথে যান । এটি ডিবিতে আরও একটি ক্যোয়ারী যুক্ত করবে।
উদাহরণ
যেমন উত্তরগুলি সর্বদা একটি উদাহরণের সাথে আরও ভাল কাজ করে, আপনি এখানে একটি দুর্দান্ত একটি পেয়েছিলেন (ব্র্যাড টয়েসনার্ডের কাছে প্রপস), যা মূল বিষয়টিকে প্রসারিত করে এবং তাই এটি পুনরায় ব্যবহারযোগ্য (এটির থেকে একটি প্লাগইন তৈরি করুন):
class My_Book_Query extends WP_Query
{
function __construct( $args = array() )
{
// Forced/default args
$args = array_merge( $args, array(
'posts_per_page' => -1
) );
add_filter( 'posts_fields', array( $this, 'posts_fields' ) );
parent::__construct( $args );
}
public function posts_fields( $sql )
{
return "{$sql}, {$GLOBALS['wpdb']->terms}.name AS 'book_category'";
}
}
তারপরে আপনি নীচের উদাহরণে দেখতে পাচ্ছেন এমনভাবে আপনার দ্বিতীয় / অতিরিক্ত ক্যোয়ারী চালাতে পারেন। আপনার কোয়েরিটি পরে পুনরায় সেট করতে ভুলবেন না।
$book_query = new My_Book_Query();
if ( $book_query->have_posts() )
{
while ( $book_query->have_posts() )
{
$book_query->the_post();
# ...do stuff...
} // endwhile;
wp_reset_postdata();
} // endif;