यदि आप इसे SQL में समझा सकते हैं, तो आप इसके लिए क्वेरी कर सकते हैं! तीन स्थान हैं जहाँ हम डिफ़ॉल्ट क्वेरी बदलना चाहते हैं:
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;
}
यह हमें निम्नलिखित SQL क्वेरी देता है:
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()
खुद को कॉल नहीं करना चाहिए , लेकिन पृष्ठ को सेट करते समय वर्डप्रेस द्वारा की जाने वाली मुख्य पोस्ट क्वेरी को संशोधित करें।