Posting kueri hanya dengan gambar unggulan

15

Saya ingin meminta 6 posting, tetapi hanya mereka yang memiliki gambar fitur terlampir. Saya menggunakan meta_keymetode untuk ini dengan WP_Query:

$args = array(
    'post_type'  => 'post',
    'meta_key' => '_thumbnail_id',
    'post_count' => 6 );
$query = new WP_Query($args);

Diikuti oleh

<?php while($query->have_posts()) : $query->the_post(); ?>
    <h2><?php the_title(); ?></h2>
    <?php the_post_thumbnail('thumbnail'); ?>
<?php endwhile; ?>

Ini sepertinya tidak berhasil. Kueri mengembalikan lebih dari 6 pos dan juga yang tidak memiliki gambar unggulan. Ada ide apa yang salah di sini?

@ chip: var_dump($query);memberikan hasil yang besar jadi saya telah mempostingnya di pastebin

harryg
sumber
2
Cuplikan kode berfungsi untuk saya seperti yang diharapkan. Mungkin kesalahan ada di bagian lain dari kode.
Ralf912
Apa yang Anda dapatkan dari var_dump( $query )?
Chip Bennett
Sebagai tambahan saya pikir - posting diimpor ke server lokal saya dari situs langsung menggunakan pengekspor / importir wordpress. Semua posting asli menampilkan gambar yang jelas hilang dalam proses impor. Mungkinkah itu berarti bahwa meskipun gambar yang ditampilkan dihapus kunci meta masih menyebabkan kueri berantakan?
harryg
Ketika Anda menjalankan impor, apakah Anda menandai kotak untuk mengunduh dan melampirkan semua lampiran / media? Jika Anda tidak melakukannya, maka gambar unggulan Anda tidak akan berfungsi. Posting akan memiliki gambar unggulan, tetapi itu akan merujuk pada lampiran yang tidak ada, dan karenanya tidak akan pernah ditampilkan
Tom J Nowell
Ya, saya menandai kotak itu ketika mengimpor.
harryg

Jawaban:

3

Saat menjalankan importir, Anda harus mencentang kotak untuk mengunduh dan mengimpor semua media / lampiran.

Jika tidak, kiriman akan tetap memiliki kumpulan gambar unggulan, tetapi lampiran yang dirujuknya tidak valid, dan segala upaya untuk menelepon the_post_thumbnailakan gagal. Dengan menggunakan kode Anda, Anda hanya akan mendapatkan judul posting, dan tidak ada thumbnail. Ini akan memberi kesan bahwa posting yang tidak memiliki gambar unggulan sedang ditarik. Ini tidak terjadi, mereka memiliki gambar unggulan, itu hanya tidak tersedia karena kesalahan yang Anda buat saat mengimpor.

Hapus posting Anda, dan impor kembali menggunakan pengaturan yang benar.

Juga untuk menunjukkan intinya, Anda tidak berusaha untuk benar-benar memeriksa pos, selalu periksa misalnya:

if ( $query->have_posts() ) { // you never checked to see if no posts were found
    while($query->have_posts()) { // alt style syntax doesn't work with most IDEs
        $query->the_post(); // individual statement should be on individual line
        ?><h2><?php the_title(); ?></h2><?php // you only need open/close tags here, not every line, save yourself some time typing
        if ( has_post_thumbnail() ) { // only print out the thumbnail if it actually has one
            echo '<p>post says it has a featured image</p>'; // double checking
            the_post_thumbnail('thumbnail');
        } else {
            echo '<p>this post does not have a featured image</p>';
        }
    }
} else {
    echo '<p>no posts found</p>';
}

Jika Anda belum mencentang kotak, Anda akan mendapatkan gambar yang mengatakan mereka memiliki gambar unggulan, tetapi tidak ada gambar yang ditampilkan

Tom J Nowell
sumber
1
Saya menduga inilah alasan jawaban yang saya berikan tidak berfungsi seperti yang diharapkan. yang bunuh diri WordPress Plugin ini cukup membantu untuk menghapus semua konten.
Helgatheviking
Saya benar-benar memeriksa kotak itu. Namun dalam pengalaman saya itu tidak pernah berhasil untuk saya. Semua gambar dihubungkan kembali ke situs eksternal. Saya menggunakan plugin Impor Gambar Eksternal ( wordpress.org/extend/plugins/import-external-images ) untuk menyimpan gambar secara lokal dan melampirkan.
harryg
Saya memiliki pemikiran yang sama, saya pasti mencentang kotaknya, mengapa itu tidak berhasil? Saya sudah mendapatkannya dari klien, dan sangat mudah untuk salah, jadi hapus posting Anda, impor kembali dan pastikan sudah dicentang, dan jika masih tidak berhasil maka Anda dapat mengesampingkannya. Kalau tidak, ada Neil DeGrasse Tyson yang berbicara tentang betapa lemahnya memori manusia. Saat ini saya dapat meminta Anda untuk menghapus centang pada kotak centang kedua dan Anda mungkin akan ingat melihat itu juga (tetapi tidak ada satu pun)
Tom J Nowell
Sementara itu, bungkus the_post_thumbnaildengan has_thumbnailpanggilan dan tambahkan case lain sehingga Anda pasti tahu bahwa postingan tersebut tidak memiliki gambar unggulan
Tom J Nowell
Pastikan juga server Anda dapat menjangkau server jarak jauh. Jika server Anda tidak dapat mengambil permintaan jarak jauh, itu tidak akan dapat diimpor. Anda mungkin perlu menghapus lampiran media yang sudah diambil
Tom J Nowell
23

Pada WordPress 3.5, Parameter Meta Query mendukung EXISTSdan NOT EXISTSsebagai operator perbandingan. Dalam kasus di mana Anda menggunakan ini, Anda bisa menghilangkan valuebagian dari permintaan meta. Coba argumen berikut untuk kueri Anda:

$args = array(
   'post_type'  => 'post',
   'posts_per_page' => 6,
    'meta_query' => array(
        array(
         'key' => '_thumbnail_id',
         'compare' => 'EXISTS'
        ),
    )
);
helgatheviking
sumber
Terima kasih untuk sarannya. Saya sekarang mendapatkan 6 posting tetapi masih mendapatkan posting tanpa thumbnail.
harryg
Saya menguji ini dan itu berhasil untuk saya. Tapi saya perhatikan bahwa itu akan mengembalikan entitas yang memiliki set meta, tetapi untuk beberapa alasan bahwa lampiran ID tidak benar. Jadi periksa kembali apakah posting Anda memiliki gambar yang ditetapkan. Kalau tidak, saya tidak tahu apa lagi masalahnya.
helgatheviking
Harryg, dapatkah Anda mengonfirmasi bahwa Anda menggunakan v3.5 atau yang lebih baru?
Tom J Nowell
Ya saya menjalankan versi terbaru WordPress - baru diinstal pada server dev lokal saya sebagai pengaturan jaringan (multisite).
harryg
2
Hanya beberapa informasi tambahan: Ada bug yang belum terselesaikan, lihat tiket trac 23268 , yang membuatnya perlu menggunakan nilai jika NOT EXISTSdigunakan.
Nicolai