मेटा_क्वरी 'की तुलना' => 'में' काम नहीं कर रहा है


14

सबसे पहले, मुझे पता है कि यह एक डुप्लिकेट है, लेकिन पुराने उत्तरों में से कोई भी सहायक नहीं था।

मैं के माध्यम से पोस्ट में खोज रहा हूँ post_meta। यहां मेरा कोड है, जो वर्तमान में कुछ भी नहीं लौटाता है।

$args   =   array(
    'numberposts'   => -1,
    'post_type'     => 'post',
    'meta_query'    => array(
        array(
            'key'       => 'system_power_supply',
            'value'     => array('single', 'redundant'),
            'compare'   => 'IN',
        )
    )

);

$query = new WP_Query($args);
echo $query->found_posts;

अगर मैं meta_queryइसे हटाता हूं । मुझे इन बातों पर यकीन है:

  • keyया में वर्तनी की कोई गलती नहीं है value
  • पोस्ट प्रकार है post
  • वहाँ है 'system_power_supply' में मूल्य 'एकल' के साथ एक पोस्ट। हालाँकि, पोस्ट फ़ील्ड उन्नत कस्टम फ़ील्ड द्वारा बनाए गए हैं ।

है system_power_supplyधारावाहिक?
Howdy_McGee

हाँ यही है। यहाँ postmeta तालिका में मूल्य है a:1:{i:0;s:6:"single";}
रिजवान

2
अच्छी तरह से यह आपकी समस्या है, मेटा क्वेरी क्रमबद्ध डेटा पर काम नहीं करेगी। यदि आप इस साइट को क्रमबद्ध डेटा क्वेरी के लिए खोजते हैं तो आपको कुछ उत्तर मिलेंगे, लेकिन कोई भी तरीका आदर्श नहीं होगा।
मिलो

जवाबों:


13

मेटा क्वेरी में क्रमबद्ध मानों को खोजने का कोई आसान तरीका नहीं है। यदि मानों की सूची लंबी नहीं है, तो संभवतः आप कई मेटा क्वेरीज़ सेट कर सकते हैं:

'meta_query'    => array(
    'relation' => 'OR',
    array(
        'key'       => 'system_power_supply',
        'value'     => 'single',
        'compare'   => 'LIKE',
    ),
    array(
        'key'       => 'system_power_supply',
        'value'     => 'redundant',
        'compare'   => 'LIKE',
    )
)

या यदि आप सुपर फैंसी प्राप्त करना चाहते हैं, तो आप इसे गतिशील रूप से सेट कर सकते हैं:

$values_to_search = array('single', 'redundant');
$meta_query = array('relation' => 'OR');
foreach ($values_to_search as $value) {
    $meta_query[] = array(
        'key'       => 'system_power_supply',
        'value'     => $value,
        'compare'   => 'LIKE',
    );
}

बहुत बहुत धन्यवाद, भाई। मैं आपको नहीं बता सकता कि आपने मेरा कितना बड़ा सिरदर्द हल किया है।
रिज़वान

btw, क्यों meta_value क्रमबद्ध डेटा युक्त है अगर हम meta_query के माध्यम से क्वेरी करने में सक्षम नहीं हैं? क्या यह वर्डप्रेस का बग है?
रिजवान

1
मैं एक महिला हूं, "भाई" नहीं, लेकिन कोई समस्या नहीं है। जिस तरह से उन्नत कस्टम फ़ील्ड डेटा सहेजती है, उसके कारण मेटा_वेल्यू में क्रमबद्ध डेटा होता है। यह सुनिश्चित करने के लिए आदर्श नहीं है।
जेन

1
हाहा, मैं अपनी महिला से माफी मांगता हूं। दूसरे और तीसरे ने अच्छी तरह से काम किया, पहली कोशिश नहीं की।
रिज़वान

2
आप पहले वाले को हटा सकते हैं, यह काम नहीं करता है
तोस्कान

4

मुझे पता है कि यह एक लंबा समय हो गया है, लेकिन बस किसी के पास एक ही मुद्दा है। इससे पहले कि मैं इस मुद्दे को खोजने से पहले घंटों तक अपने बालों को खींचता रहा: 'इन' तुलना ऑपरेटर के साथ 'मेटा_क्वरी' सामान्य सरणी को स्वीकार नहीं करता है। इसके बजाय, आपको पहले ',' के साथ जुड़ना होगा।

तो, आपके मामले में, कुछ इस तरह काम करना चाहिए:

$args   =   array(
'posts_per_page'   => -1,
'post_type'     => 'post',
'meta_query'    => array(
    array(
        'key'       => 'system_power_supply',
        'value'     => join(', ', array('single', 'redundant')),
        'compare'   => 'IN',
    )
)
);
$query = new WP_Query($args);
echo $query->found_posts;

WP 5 में आप केवल सरणी को सीधे मान कुंजी में पास कर सकते हैं। यदि आप इसे एक स्ट्रिंग से जोड़ते हैं, तो आप अप्रत्याशित परिणाम प्राप्त कर सकते हैं कि कैसे डब्ल्यूपी IN()भाग के लिए स्ट्रिंग को खंडों में विभाजित करता है । जैसे, 'this that', 'and', 'that'बन जाता है 'this','that','and','that'- इसलिए यह बेहतर है कि इसे केवल सरणी दें।
केलाप्पन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.