Bagaimana saya bisa menampilkan posting hanya jika meta_value tidak kosong

36

Tiga orang sudah mencoba untuk menyelesaikan ini, dan kami akan segera tiba. Saya hanya ingin menampilkan posting yang memiliki nilai di meta_key 'Featured_image'.

Jadi ... jika 'Featured_image' tidak kosong, tampilkan kiriman. Ini kodenya:

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

Kami telah mencoba secara harfiah setiap kombinasi yang dapat kami pikirkan, opsi meta_ * yang sudah usang, query_posts, get_posts, alih-alih WP_Query ... Tidak ada. Mencetak pernyataan pilih, tidak ada bidang nilai meta yang ditampilkan. Itu ada - untuk posting (untuk setiap posting) dan ada di db.

Kami telah melihat setiap pos di sana tentang topik saat ini, termasuk yang berikut:

query_posts dan hanya menampilkan hasil jika bidang khusus tidak kosong

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

Zilch. Tolong bantu...

robalan
sumber
Versi WordPress apa yang Anda gunakan?
MikeSchinkel
@MikeSchinkel - Maaf Mike, tidak melihat ini - Ini 3.1.
robalan
WP 3.5 memperbaiki masalah ini dan memungkinkan Anda menggunakan metode perbandingan yang berbeda
Erenor Paz

Jawaban:

6

Hai @Rob:

Alasan Anda tidak dapat menemukan cara melakukannya adalah karena itu tidak mungkin, setidaknya tidak tanpa menggunakan SQL. Coba tambahkan berikut ini ke functions.phpfile tema Anda :

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

Jika Anda memiliki 'featured_image'bidang khusus dengan nilai kosong di atas akan menyaringnya. Jika masalah Anda adalah hal lain, kami harus melihat seperti apa data Anda untuk menyelesaikannya.

Satu hal yang saya ingin tahu tentang; bagaimana Anda mendapatkan nilai kosong 'featured_image'? Admin UI di WordPress 3.1 melakukan yang terbaik untuk mencegah Anda memasukkan nilai kosong. Semoga ini membantu.

MikeSchinkel
sumber
Terima kasih Tuhan ... jadi bukan hanya kita. Itu bagus untuk diketahui, saya kira. Terima kasih @MikeSchinkel - Mereka benar-benar harus memasukkannya ke dalam kodeks ... Menantikan penjelasannya. Terima kasih!!
robalan
@Rob - Jadi saya menggunakan pengetahuan 3.0 dan sekarang saya mengujinya dalam 3.1 dan sepertinya berhasil. Saya punya dua posting dan satu dengan featured_imagebidang khusus dan permintaan Anda berfungsi dengan baik. Apa yang kamu temukan Apakah ada kemungkinan kueri Anda memuat posting yang memiliki featured_imagebidang khusus tetapi di mana nilai untuk bidang itu kosong?
MikeSchinkel
@MikeSchinkel - Jangan bercanda? Ya, itulah yang dilakukannya - setiap pos memiliki bidang Featured_image, semuanya belum disetel. Toh memuat semua posting.
robalan
@Rob - Lihat jawaban saya yang diperbarui.
MikeSchinkel
@MikeSchinkel - Terima kasih! Tampaknya berfungsi dengan baik, setelah mengatur post_type di kueri juga. Nilai kosong bertujuan - tidak setiap posting memiliki gambar unggulan ini (dan saya tahu tentang thumbnail posting, itu bukan pilihan yang baik untuk situs ini). Terima kasih banyak!
robalan
57

Ini tampaknya berhasil untuk mendapatkan nilai ke dalam kueri, tidak yakin apakah itu menarik hasil yang valid.

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

Tidak punya waktu untuk membuat bidang untuk menguji hasilnya, tetapi saya telah menonton kueri yang telah saya kerjakan hari ini dan memperhatikan NOT INakan dengan senang hati mengambil array kosong.

t31os
sumber
Saya tahu ini adalah jawaban lama, tetapi bagi mereka yang mencoba pendekatan ini, ini bekerja dengan 'compare' => 'NOT LIKE'alih - alih 'NOT IN'
handsofaten
3
Tentunya lebih efisien untuk digunakan! = Bukannya tidak suka atau tidak suka. Sama seperti wordpress.stackexchange.com/a/10286/32863 (yaitu tentang kunci meta, tetapi prinsip yang sama)
Adam
5
Solusi yang lebih bersih: seperti yang sudah dikatakan Adam. 'value' => '', 'compare' => '!='
Harus
Jika Anda perlu memeriksa untuk memastikan itu bukan array kosong ...'value' => array('', array(), serialize(array())), 'compare' => 'NOT IN'
StephanieQ
10

Ini adalah pertanyaan lama, tetapi sepertinya Wordpress telah memperbaiki "fitur yang hilang" ini: sekarang, menurut Wordpress Codex dimungkinkan untuk memeriksa keberadaan (atau tidak adanya) kunci meta, seperti ini

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

Ini tersedia pada WP> = 3.5.

Erenor Paz
sumber
EXISTSakan menampilkan nilai kosong yang bukan yang kita kejar di sini. Solusi terbaik adalah 'value' => '', 'compare' => '!=' sejauh pengujian saya.
Ben
1
@ Ben Itulah yang dicoba OP, tetapi tanpa hasil, tampaknya. Saya menambahkan solusi saya untuk memastikan orang yang lewat dengan mencari metode untuk mengambil posting berdasarkan keberadaan meta_key dapat menemukannya. Karena nilai meta dapat berupa "sesuatu", "kosong" atau "nol" (jika meta tidak ada), mungkin solusi terbaik adalah menggabungkan dua opsi dengan hubungan "DAN"
Erenor Paz
4

Ini adalah permintaan yang berfungsi untuk saya. Sangat mirip dengan perbandingan pada jawaban t31os dari 2011, tetapi karena kunci / nilai meta hanyalah textstring yang sederhana, itu tidak perlu berupa array meta_query.

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

Untuk alasan apa pun, menggunakan 'meta_value' => '' dan 'meta_compare' => '! =' Atau 'meta_compare' => 'TIDAK SUKA' masih menarik semua posting untuk saya, tetapi mungkin ada hubungannya dengan fakta bahwa Saya membuat nilai meta saya menggunakan plugin Advanced Custom Fields (ACF).

Baca lebih lanjut tentang parameter bidang khusus dalam kodeks .

Tessa
sumber
3

Apakah saya melewatkan sesuatu?

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

?>

Tidak akan melakukannya?

Media Infinity
sumber
Sunting: dari kodeks: $query = new WP_Query( 'meta_key=featured_image' ); lihat di sini: codex.wordpress.org/Class_Reference/…
Infinity Media
Pertama, Anda selalu dapat mengedit pertanyaan atau jawaban alih-alih menambahkan komentar. Kedua: Jangan menyalahgunakan jawaban, bukan komentar.
kaiser
Jika Anda memiliki pertanyaan baru, silakan tanyakan dengan mengklik tombol Ajukan Pertanyaan . Sertakan tautan ke pertanyaan ini jika itu membantu memberikan konteks.
kaiser
@iser - bagi saya sepertinya dia menjawab. Dia tidak menanyakan apakah kodenya valid, tapi saya kira dengan sinis menjawab pertanyaan dengan apa yang dia yakini akan berhasil.
Nathan
@Nathan Inilah komentar untuk apa.
kaiser
-3
!has_featured_image();

satu liner ftw.

tom
sumber