मैं pre_get_posts
फ़िल्टर का उपयोग करके निर्मित WP खोज में संशोधन कर रहा हूं , जिससे उपयोगकर्ता विभिन्न क्षेत्रों द्वारा पदों (कस्टम पोस्ट प्रकारों का एक गुच्छा सहित) को सॉर्ट करने की अनुमति देता है।
हालाँकि मुझे जो समस्या हो रही है वह यह है कि जब मैं WP को एक मेटा वैल्यू के आधार पर छाँटने के लिए कहता हूँ तो यह उन सभी पोस्टों को बाहर कर देगा जिनमें मेटा वैल्यू सेट नहीं है। यह परिणामों की संख्या को बदलने का कारण बनता है यदि आप "मूल्य" से "दिनांक" तक छँटाई को बदलते हैं क्योंकि "पोस्ट" में "मूल्य" सेट नहीं है लेकिन "आइटम" हैं।
यह वह नहीं है जो मैं चाहता हूं, इसलिए मैं यह जानना चाहूंगा कि क्या सभी पोस्टों को शामिल करने का एक तरीका है - यहां तक कि उन लोगों की भी कमी है जो मेरे द्वारा छंटनी कर रहे हैं - और अंतिम मान के बिना किसी को डाल दिया है।
मैं जानता हूं कि एक से अधिक क्षेत्रों पर कैसे छांटा जाए लेकिन इससे कोई मदद नहीं मिलती है।
धन्यवाद
लगता है कि मैं इस सवाल के साथ एक ही नहीं हूँ: wp_dery के लिए args में कुछ meta_key के साथ और बिना पोस्ट शामिल करने का तरीका? लेकिन वहाँ कोई समाधान नहीं है।
अद्यतन करें
मैंने जवाब देने की कोशिश की है, लेकिन यकीन नहीं है कि अगर मैं सही ढंग से समझ गया, तो यहां मेरे पास अभी क्या है:
<?php
function my_stuff ($qry) {
$qry->set('meta_query', array(array(
'key' => 'item_price',
'value' => '',
'compare' => 'NOT EXISTS'
)));
$qry->set('orderby', 'meta_value date'); # Sorting works with meta_value as well as meta_value_num - I've tried both
$qry->set('order', 'ASC DESC');
$qry->set('meta_key', 'item_price');
}
मेटा वैल्यू एक संख्या है (इसका उपयोग मूल्य को स्टोर करने के लिए किया जाता है जैसा कि नाम से पता चलता है)
अपडेट २
मैंने ऑर्डर-सामान पर टिप्पणी की है और मेरे पास अब यही है:
<?php
$qry->set('meta_query', array(array(
'key' => 'item_price',
'value' => '',
'compare' => 'NOT EXISTS'
)));
इस कोड के साथ क्वेरी उन सभी पोस्टों को वापस कर देती है जिनके पास item_price
कुंजी नहीं है और जो भी पोस्ट हैं उनमें से कोई भी नहीं है। IE समस्या अब उलट है।
यदि मैं ऑर्डर-कोड में जोड़ता हूं तो मुझे 0 परिणाम मिलते हैं।
संपादित करें: ... तीन साल बाद ... पीआई का यह मुद्दा फिर से था। मैंने दिए गए सभी उत्तरों की कोशिश की और कोई भी काम नहीं किया। निश्चित नहीं है कि कुछ लोगों को लगता है कि वे काम करते हैं लेकिन वे मेरे लिए कम से कम काम नहीं करते हैं।
मैं जिस समाधान के साथ समाप्त हुआ वह save_post
फ़िल्टर का उपयोग कर रहा है - सुनिश्चित करें कि सभी पोस्ट में कस्टम फ़ील्ड है जिसे मैं सॉर्ट करना चाहता हूं। यह थोड़ा परेशान करने वाला है जो मुझे करना है, लेकिन जब तक आप इसे जल्दी करते हैं, तब तक आपके पास कोई समस्या नहीं होगी।
इस स्थिति में मैं पोस्ट पर एक "व्यू काउंटर" बना रहा था और चाहता था कि उपयोगकर्ता सबसे अधिक पढ़ी जाने वाली पोस्टों को छाँट सकें। फिर से, वे पोस्ट जिन्हें कभी नहीं देखा गया है (मुझे लगता है कि यह बहुत कम संभावना है - लेकिन अभी भी) दृश्य गणना पर छंटनी होने पर गायब हो गया। मैंने यह सुनिश्चित करने के लिए इस कोड को थोड़ा जोड़ा कि सभी पोस्ट में एक दृश्य गणना है:
add_action('save_post', function ($postId) {
add_post_meta($postId, '_sleek_view_count', 0, true);
});
meta_query
और tax_query
कर रहे हैं हमेशा एक array( array() )
के रूप में वे कई सरणियों गठबंधन। दूसरा - जैसा कि मेरे उत्तर में बताया गया है - आपको meta_value_num
संख्याओं के लिए उपयोग करने की आवश्यकता है । यह वास्तव में meta_value_num
(देखें WP_Query
-कोड पृष्ठ प्रविष्टि) को परिभाषित करने के लिए आवश्यक हो सकता है । अंत में, यह और दिशा order
में कोई मतलब नहीं है । यह संभव नहीं है। अंतरिक्ष सीमांकक केवल काम करता है और आप इसे पहले और दूसरे क्रमबद्ध करने के लिए नहीं कह सकते । फिल्टर किस लिए है ASC
DESC
orderby
ASC
DESC
posts_clauses
meta_value_num
प्रविष्टियाँ वास्तविक संख्याएँ हैं। यह भी अक्सर देखा कि किसी ने कहा कि यह एक संख्या है, लेकिन वास्तव में इसे डेटाबेस में एक स्ट्रिंग के रूप में सहेज रहा है।
ASC DESC
यह है कि यह meta_value
अंदर ASC
और बाहर की ओर date
है DESC
, जहां तक मैं बता सकता हूं कि यह काम करता है।