मैं केवल पोस्ट कैसे दिखा सकता हूं अगर मेटा_वेल्यू खाली नहीं है


36

तीन लोगों ने पहले ही इसे हल करने की कोशिश की है, और हम ऊपर आ रहे हैं। मैं केवल उन्हीं पोस्ट्स को दिखाना चाहता हूं जिनका मेटा_की 'फ़ीचर्ड_मैज' में मान है।

इसलिए ... यदि 'विशेषण' खाली नहीं है, तो पोस्ट दिखाएं। यहाँ कोड है:

      <ul>
      <?php
      $args = array(
        'showposts' => 5,
        'meta_query' => array(
          array(
            'key' => 'featured_image',
            'value' => '',
            'compare' => '!='
            )
          )
      );
      $ft_pagination = new WP_Query( $args );
      ?>
      <?php while ($ft_pagination->have_posts()) : $ft_pagination->the_post(); ?>
        <?php $ftimage = get_post_meta(get_the_id(), 'featured_image', TRUE); ?>
        <li>
          <article>
            <a href="">
            <?php if ($ftimage): ?>
              <img src="<?php bloginfo('template_directory'); ?>/timthumb.php?src=<?php echo $ftimage; ?>&w=84&h=60" alt="" />
            <?php else: ?>
              <img src="<?php bloginfo('template_directory'); ?>/timthumb.php?src=/wp-content/themes/ssv/images/review-default.gif&w=84&h=60" alt="" />
            <?php endif; ?>
            </a>
          </article>
        </li>
      <?php
      endwhile;

      wp_reset_query();
      ?>
      </ul>

हमने शाब्दिक रूप से हर संयोजन की कोशिश की है जिसे हम सोच सकते हैं, पदावनत मेटा_ * विकल्प, query_posts, get_posts, WP_Query के बजाय ... कुछ भी नहीं। चयनित कथन मुद्रित किया गया, कोई मेटा मान फ़ील्ड नहीं दिख रहा है। यह मौजूद है - पदों के लिए (प्रत्येक पद के लिए) और यह db में मौजूद है।

हमने इस विषय पर अभी हर पोस्ट को देखा है, इनमें शामिल हैं:

यदि कोई कस्टम फ़ील्ड खाली नहीं है, तो query_posts और केवल परिणाम दिखाएं

http://scribu.net/wordpress/advanced-metadata-queries.html

कुछ भी नहीं। कृपया सहायता कीजिए...


आप वर्डप्रेस के किस संस्करण का उपयोग कर रहे हैं?
6

@MikeSchinkel - क्षमा करें माइक, यह नहीं देखा - यह 3.1 है।
रोलन

WP 3.5 इस समस्या को ठीक करता है और आपको एक अलग तुलना विधि का उपयोग करने देता है
Erenor Paz

जवाबों:


6

हाय @ रोब:

कारण यह है कि आप यह नहीं कर सकते कि यह कैसे करना है क्योंकि यह संभव नहीं है, कम से कम एसक्यूएल का सहारा लिए बिना नहीं। अपनी थीम की functions.phpफ़ाइल में निम्न जोड़ने का प्रयास करें :

add_filter('posts_where','yoursite_posts_where',10,2);
function yoursite_posts_where($where,$query) {
  global $wpdb;
  $new_where = " TRIM(IFNULL({$wpdb->postmeta}.meta_value,''))<>'' ";
  if (empty($where))
    $where = $new_where;
  else
    $where = "{$where} AND {$new_where}";
  return $where;
}

यदि आपके पास 'featured_image'रिक्त मान वाले कस्टम फ़ील्ड हैं तो उपरोक्त उन्हें फ़िल्टर कर देगा। यदि आपको समस्या कुछ और है, तो हमें यह देखना होगा कि आपका डेटा इसे हल करने के लिए कैसा दिखता है।

एक बात मैं उत्सुक हूँ; आपको खाली मान कैसे मिले 'featured_image'? WordPress 3.1 में व्यवस्थापक UI आपको खाली मान दर्ज करने से रोकने के लिए अपना सर्वश्रेष्ठ प्रयास करता है। उम्मीद है की यह मदद करेगा।


भगवान का शुक्र है ... तो यह सिर्फ हम नहीं हैं। यह जानना अच्छा है, मुझे लगता है। धन्यवाद @MikeSchinkel - वे वास्तव में कोडेक्स में डाल देना चाहते हैं ... स्पष्टीकरण की प्रतीक्षा कर रहे हैं। धन्यवाद!!
रोलन

@ रोब - तो मैं अपने 3.0 ज्ञान से दूर जा रहा था और अब मैं 3.1 में परीक्षण कर रहा हूं और यह काम करने लगता है। मेरे पास दो पोस्ट हैं और एक featured_imageकस्टम फ़ील्ड के साथ और आपकी क्वेरी ठीक काम करती है। आप क्या ढूंढ रहे हैं? क्या कोई मौका है कि आपकी क्वेरी ऐसे पोस्ट लोड कर रही है जिनमें एक featured_imageकस्टम फ़ील्ड है लेकिन उस फ़ील्ड का मान कहाँ खाली है?
माइकस्किंकेल

@MikeSchinkel - कोई मज़ाक नहीं? हां, यह वही है जो यह कर रहा है - हर पोस्ट में विशेष रूप से फ़ीचर्ड फ़ील्ड है, वे सभी सेट नहीं हैं। यह वैसे भी सभी पोस्ट लोड कर रहा है।
रोलन

@Rob - मेरा अद्यतन उत्तर देखें।
माइकशिंकल

@MikeSchinkel - धन्यवाद! यह पूरी तरह से काम करने के लिए लगता है, क्वेरी में post_type सेट करने के बाद भी। खाली मान उद्देश्यपूर्ण हैं - हर पोस्ट में यह छवि नहीं है (और मुझे पोस्ट थंबनेल के बारे में पता है, यह सिर्फ इस साइट के लिए एक अच्छा विकल्प नहीं है)। बहुत बहुत धन्यवाद!
रबालन

57

यह क्वेरी में मान प्राप्त करने के लिए काम करता है, इस बारे में निश्चित नहीं है कि यह मान्य परिणाम खींचता है या नहीं।

'meta_query' => array(
    array(
        'key' => 'some_key',
        'value'   => array(''),
        'compare' => 'NOT IN'
    )
)

परिणामों का परीक्षण करने के लिए फ़ील्ड बनाने का समय नहीं था, लेकिन मैं आज के साथ काम किए गए प्रश्नों को देख रहा हूं और ध्यान NOT INसे खुशी से खाली सरणी लेगा।


मुझे पता है कि यह एक पुराना उत्तर है, लेकिन इस ऐप को आज़माने वालों के लिए, यह ''compare' => 'NOT LIKE''NOT IN
हैंड्सोफेन

3
उपयोग करने के लिए निश्चित रूप से अधिक कुशल! = इसके बजाय में नहीं या पसंद नहीं है। के रूप में ही wordpress.stackexchange.com/a/10286/32863 (है कि मेटा कुंजी के बारे में, लेकिन एक ही सिद्धांत)
एडम

5
यहां तक ​​कि क्लीनर समाधान: जैसे कि एडम ने पहले ही कहा था। उपयोग करने के लिए है: 'value' => '', 'compare' => '!='
Martijn van Hoof

यदि आपको यह सुनिश्चित करने के लिए जांचने की आवश्यकता है कि यह खाली सरणी नहीं है ...'value' => array('', array(), serialize(array())), 'compare' => 'NOT IN'
StephanieQ

10

यह एक पुराना प्रश्न है, लेकिन ऐसा लगता है कि Wordpress ने इस "लापता सुविधा" को निर्धारित कर दिया है: अब, Wordpress के अनुसार कोडेक्स संभव है कि मेटा कुंजी के अस्तित्व (या गैर-अस्तित्व) की जाँच करें, इस तरह

'meta_query' => array(
    array(
        'key' => 'featured_image',
        'compare' => 'EXISTS', //or "NOT EXISTS", for non-existance of this key
    )
)

यह WP> = 3.5 के रूप में उपलब्ध है।


EXISTSखाली मान दिखाएंगे जो कि यहाँ के बाद नहीं है। सबसे अच्छा समाधान है 'value' => '', 'compare' => '!=' जहाँ तक मेरा परीक्षण है।
बेन

1
@ यह ठीक वही है जो ओपी ने कोशिश की, लेकिन बिना किसी सफलता के, ऐसा लगता है। मैंने अपना समाधान जोड़ा कि यह सुनिश्चित करने के लिए कि मेटाटाइक के अस्तित्व के आधार पर पदों को पुनः प्राप्त करने के लिए एक विधि की खोज करके गुजरने वाले लोग इसे पा सकें। चूंकि मेटा का मान "कुछ", "खाली" या "अशक्त" हो सकता है (यदि मेटा मौजूद नहीं है), तो संभवतः सबसे अच्छा समाधान "और" संबंध के साथ दो विकल्पों को मर्ज करना होगा
एरेनोर पाज़

4

यह मेरे लिए काम करने वाली क्वेरी है। 2011 से t31os के उत्तर की तुलना में बहुत समान है, लेकिन क्योंकि मेटा कुंजी / मूल्य केवल एक साधारण टेक्स्टस्ट्रिंग है, इसे मेटा_क्वेरी सरणी होने की आवश्यकता नहीं है।

$args = array(
    'posts_per_page' => 5,//replaced 'showposts' in version 2.1
    'meta_key' => 'featured_image',
    'meta_value' => array(''),
    'meta_compare' => 'NOT IN'
);

जो भी कारण के लिए, 'मेटा_वल्यू' => ' और ' मेटा_कॉमर्स '=> =!' या 'मेटा_कॉमर्स' => 'नॉट लाइक' का उपयोग करके अभी भी मेरे लिए सभी पोस्ट खींचे गए हैं, लेकिन यह शायद इस तथ्य के साथ कुछ करना है मैंने उन्नत कस्टम फ़ील्ड (ACF) प्लगइन का उपयोग करके अपना मेटा मान बनाया।

कोडेक्स में कस्टम फ़ील्ड मापदंडों के बारे में अधिक पढ़ें



3

क्या मैं कुछ भूल रहा हूँ?

<?php 
    $args = array(
        'post_type' => 'post',
        'posts_per_page' => -1,
        'meta_key' => "featured_image"
    );
    $the_query = new WP_Query( $args ); 

?>

क्या ऐसा नहीं होगा?


संपादित करें: कोडेक्स से: $query = new WP_Query( 'meta_key=featured_image' ); यहाँ देखें: codex.wordpress.org/Class_Reference/…
Infinity Media

सबसे पहले, आप हमेशा टिप्पणी जोड़ने के बजाय एक प्रश्न या उत्तर को संपादित कर सकते हैं । दूसरा: टिप्पणियों के बजाय उत्तर का दुरुपयोग न करें ।
केसर

यदि आपके पास कोई नया प्रश्न है, तो कृपया प्रश्न पूछें बटन पर क्लिक करके इसे पूछें । इस प्रश्न का लिंक शामिल करें यदि यह संदर्भ प्रदान करने में मदद करता है।
केसर

@kaiser - मुझे लगता है जैसे वह जवाब दे रहा था। वह नहीं पूछ रहा है कि क्या उसका कोड वैध है, लेकिन मुझे लगता है कि वह जो काम करेगा, उसके साथ सवाल का जवाब देने पर व्यंग्य करेगा।
नाथन

@ नथन यह टिप्पणी किस लिए है
kaiser

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.