Yalnızca meta_value boş değilse gönderileri nasıl gösterebilirim


36

Üç kişi bu sorunu çözmeye çalıştı bile ve biz sıfır geliyoruz. Yalnızca 'featured_image' meta_keyinde değeri olan gönderileri göstermek istiyorum.

Yani ... eğer 'featured_image' boş değilse, mesajı göster. İşte kod:

      <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>

Tam anlamıyla düşünebildiğimiz her kombinasyonu denedik, artık kullanımdan kaldırılan meta_ * seçenekleri, query_posts, get_posts, WP_Query yerine ... Hiçbir şey. Select deyimi yazdırıldı, hiçbir meta değer alanı gösterilmiyor. Vardır - yazılar için (her yazı için) ve db'de bulunur.

Şu anda konuyla ilgili tüm yayınları gördük, bunlar da dahil:

query_posts ve sadece özel bir alan boş değilse sonuçları göster

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

Sıfır. Lütfen yardım et...


Hangi WordPress sürümünü kullanıyorsunuz?
MikeSchinkel

@MikeSchinkel - Üzgünüm Mike, bunu görmedim - Bu 3.1.
robalan

WP 3.5 bu sorunu
çözüyor

Yanıtlar:


6

Merhaba @Rob:

Bunun nasıl yapılacağını çözememenizin nedeni, en azından SQL'e başvurmadan mümkün olmamasıdır. Aşağıdakileri temanızın functions.phpdosyasına eklemeyi deneyin :

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'Boş değerlere sahip özel alanlarınız varsa , yukarıdakiler bunları filtreleyecektir. Sorununuz başka bir şeyse, verilerinizin çözmek için nasıl göründüğünü görmemiz gerekir.

Merak ettiğim bir şey; için boş değerleri nasıl aldınız 'featured_image'? WordPress 3.1'deki yönetici kullanıcı arabirimi, sizi boş değerler girmemesi için elinden gelenin en iyisini yapar. Bu yardımcı olur umarım.


Tanrıya şükür ... bu yüzden sadece biz değiliz. Bunu bilmek güzel, sanırım. Eyvallah @MikeSchinkel - Gerçekten kodeksi koymalılar ... Açıklama için sabırsızlanıyoruz. Teşekkürler!!
robalan

@Rob - 3.0 bilgimden çıktım ve şimdi 3.1'de test ediyorum ve çalışıyor gibi görünüyor. İki mesajım ve biri featured_imageözel alanlı, sorgunuz iyi çalışıyor. Ne buluyorsun Sorgunuzun featured_imageözel bir alanı olan ancak bu alanın değerinin boş olduğu gönderileri yükleme olasılığı var mı ?
MikeSchinkel

@MikeSchinkel - Şaka yok mu? Evet, tam olarak yaptığı bu - her yazının özellikli görüntü alanı var, hepsi ayarlanmadı. Zaten tüm gönderileri yüklüyor.
robalan

@Rob - Güncellenmiş cevabımı gör.
MikeSchinkel

@MikeSchinkel - Teşekkürler! Sorgudaki post_type ayarladıktan sonra, mükemmel çalışıyor gibi görünüyor. Boş değerler maksatlıdır - her yazı bu özellikli resme sahip değildir (ve yazı küçük resmini biliyorum, bu site için iyi bir seçenek değil). Çok teşekkürler!
robalan

57

Bu değeri sorguya almak için çalışıyor gibi görünüyor, ancak geçerli sonuçlar çekip çekmeyeceği hakkında emin değil.

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

Sonuçları sınamak için alanlar oluşturmak için zamanım olmadı, ancak bugün çalıştığım sorguları izliyorum NOT IN.


Bunun eski bir cevap olduğunu biliyorum, ancak bu 'compare' => 'NOT LIKE''NOT IN
yaklaşımı deneyenler için

3
Kesinlikle kullanmak daha verimli! = Değil ya da sevmemek yerine. Wordpress.stackexchange.com/a/10286/32863 ile aynı (meta tuşlarıyla ilgili, ancak aynı prensiple)
Adam

5
Daha temiz bir çözüm: Adam'ın daha önce dediği gibi. 'value' => '', 'compare' => '!='
Kullanmak

Boş bir dizi olmadığından emin olmak için kontrol etmeniz gerekiyorsa ...'value' => array('', array(), serialize(array())), 'compare' => 'NOT IN'
StephanieQ

10

Bu eski bir soru, ancak Wordpress'in bu "eksik özelliği" düzelttiği anlaşılıyor: şimdi, Wordpress Codex'e göre meta anahtarının varlığını (veya yokluğunu) kontrol etmek mümkündür, bunun gibi

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

Bu, WP> = 3.5'ten itibaren mevcuttur.


EXISTSBurada peşinde olduğumuz şey olmayan boş değerleri gösterecektir. En iyi çözüm 'value' => '', 'compare' => '!=' benim testlerime göre.
Ben

1
@Ben OP'nin denediği tam olarak buydu, fakat başarılı olamadı. Çözümümüzü, meta_key varlığına dayanarak gönderileri almak için bir yöntem arayarak geçen kişilerin bulabildiğinden emin olmak için ekledim. Bir meta değeri "bir şey", "boş" veya "boş" olabileceğinden (meta yoksa) muhtemelen en iyi çözüm iki seçeneği "VE" ilişkisi ile birleştirmek olacaktır
Erenor Paz

4

Bu benim için işe yarayan sorgu. T31os'un 2011'deki cevabındaki karşılaştırmaya çok benzer, ancak meta anahtar / değer sadece basit bir metin dizgesi olduğu için meta_query dizisi olması gerekmez.

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

Her ne sebeple olursa olsun, 'meta_value' => '' ve 'meta_compare' => '! =' Veya 'meta_compare' => 'GİBİ DEĞİL' ifadesi hala benim için tüm gönderileri çekti, ancak büyük olasılıkla bununla ilgisi var. Gelişmiş Özel Alanlar (ACF) eklentisini kullanarak meta değerimi oluşturdum.

Kodeks içindeki özel alan parametreleri hakkında daha fazla bilgi edinin .



3

Bir şey mi eksik?

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

?>

Yapmaz mı?


Düzenleme: kodeksin içinden: $query = new WP_Query( 'meta_key=featured_image' ); buraya bakın: codex.wordpress.org/Class_Reference/…
Infinity Media

İlk olarak, bir yorum eklemek yerine her zaman bir soruyu veya yanıtı düzenleyebilirsiniz . İkincisi: Yorumlar yerine cevapları yanlış kullanmayın .
kaiser

Yeni bir sorunuz varsa, lütfen Soru Sor düğmesine tıklayarak sorun . Bağlam sağlamaya yardımcı oluyorsa, bu soruya bir bağlantı ekleyin.
kaiser

@kaiser - bana cevap veriyor gibi görünüyor. Kodunun geçerli olup olmadığını sormuyor, ama sanırım işe yarayacağına inandığı soruyu alaycı bir şekilde cevaplıyor gibi.
Nathan

@ Nathan Bu yorum için ne var.
kaiser

-3
!has_featured_image();

bir liner ftw.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.