আপনি যদি এটি এসকিউএলে ব্যাখ্যা করতে পারেন তবে আপনি এটির জন্য জিজ্ঞাসা করতে পারেন! তিনটি জায়গা রয়েছে যেখানে আমরা ডিফল্ট ক্যোয়ারীটি পরিবর্তন করতে চাই:
SELECT wp_posts.*
FROM wp_posts
INNER JOIN wp_postmeta ON (wp_posts.ID = wp_postmeta.post_id)
WHERE 1=1
AND wp_posts.post_type = 'post'
AND (wp_posts.post_status = 'publish')
AND wp_postmeta.meta_key = 'startDate'
AND CAST(wp_postmeta.meta_value AS CHAR) < '2011-03-23'
GROUP BY wp_posts.ID
ORDER BY wp_postmeta.meta_value DESC
LIMIT 0, 10
- যোগদানটি বাম জোড় হওয়া উচিত
- যেখানে-ধারা
- ক্রম
যোগদান এবং যেখানে-ধারাটি ফাংশনের মাধ্যমে যুক্ত করা হয়_get_meta_sql()
। আউটপুট ফিল্টার করা হয়, যাতে আমরা এটিতে ঝুঁকতে পারি:
add_filter( 'get_meta_sql', 'wpse12814_get_meta_sql' );
function wpse12814_get_meta_sql( $meta_sql )
{
// Move the `meta_key` comparison in the join so it can handle posts without this meta_key
$meta_sql['join'] = " LEFT JOIN wp_postmeta ON (wp_posts.ID = wp_postmeta.post_id AND wp_postmeta.meta_key = 'startDate') ";
$meta_sql['where'] = " AND (wp_postmeta.meta_value IS NULL OR wp_postmeta.meta_value < '" . date('Y-m-d') . "')";
return $meta_sql;
}
অর্ডার ক্লজ মাধ্যমে ফিল্টার করা হয় posts_orderby
:
add_filter( 'posts_orderby', 'wpse12814_posts_orderby' );
function wpse12814_posts_orderby( $orderby )
{
$orderby = 'COALESCE(wp_postmeta.meta_value, wp_posts.post_date) ASC';
return $orderby;
}
এটি আমাদের নিম্নলিখিত এসকিউএল কোয়েরি দেয়:
SELECT wp_posts.*
FROM wp_posts
LEFT JOIN wp_postmeta ON (wp_posts.ID = wp_postmeta.post_id AND wp_postmeta.meta_key = 'startDate')
WHERE 1=1
AND wp_posts.post_type = 'post'
AND (wp_posts.post_status = 'publish')
AND (wp_postmeta.meta_value IS NULL OR wp_postmeta.meta_value < '2011-03-23')
GROUP BY wp_posts.ID
ORDER BY COALESCE(wp_postmeta.meta_value, wp_posts.post_date) ASC
LIMIT 0, 10
আপনি আপনার ক্যোয়ারী করার পরে ফিল্টারগুলি আনহুক করা মনে রাখবেন, অন্যথায় আপনি অন্যান্য অনুসন্ধানগুলিকেও গণ্ডগোল করবেন। এবং যদি সম্ভব হয় তবে নিজেকে কল করা উচিত নয়query_posts()
, পৃষ্ঠা সেটআপ করার সময় ওয়ার্ডপ্রেস দ্বারা করা মূল পোস্ট ক্যোয়ারীটি পরিবর্তন করুন।