Truy vấn bài viết chỉ với hình ảnh đặc trưng


15

Tôi muốn truy vấn 6 bài viết, nhưng chỉ những bài có hình ảnh nổi bật kèm theo. Tôi đang sử dụng meta_keyphương pháp này để WP_Querylàm như vậy:

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

Theo dõi bởi

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

Điều này dường như không hoạt động. Truy vấn đang trả về hơn 6 bài đăng và cả những bài không có hình ảnh nổi bật. Bất cứ ý tưởng những gì tôi đã sai ở đây?

@chip: var_dump($query);cho một kết quả lớn vì vậy tôi đã đăng nó trong một pastebin


2
Đoạn mã làm việc cho tôi như mong đợi. Có thể lỗi là ở một phần khác của mã.
Ralf912

Bạn nhận được var_dump( $query )gì từ ?
Chip Bennett ngày

Như một điều nữa tôi nghĩ đến - các bài đăng đã được nhập vào máy chủ cục bộ của tôi từ một trang web trực tiếp bằng cách sử dụng trình xuất / nhập wordpress. Các bài viết gốc đều có hình ảnh nổi bật rõ ràng đã bị mất trong quá trình nhập. Điều đó có nghĩa là mặc dù các hình ảnh đặc trưng đã bị xóa nhưng các phím meta vẫn khiến cho truy vấn bị rối?
harryg

Khi bạn chạy nhập, bạn đã chọn hộp để tải xuống và đính kèm tất cả tệp đính kèm / phương tiện chưa? Nếu bạn không thì hình ảnh nổi bật của bạn sẽ không hoạt động. Các bài đăng sẽ có một hình ảnh nổi bật, nhưng nó sẽ tham chiếu một tệp đính kèm không tồn tại và do đó sẽ không bao giờ được hiển thị
Tom J Nowell

Có, tôi đã kiểm tra hộp khi nhập khẩu.
harryg

Câu trả lời:


3

Khi chạy trình nhập, bạn phải chọn hộp kiểm để tải xuống và nhập tất cả phương tiện / tệp đính kèm.

Nếu bạn không làm như vậy, các bài đăng vẫn sẽ có một bộ hình ảnh nổi bật, nhưng tệp đính kèm mà họ đề cập sẽ không hợp lệ và mọi nỗ lực gọi the_post_thumbnailsẽ thất bại. Sử dụng mã của bạn, bạn sẽ chỉ nhận được tiêu đề bài viết, và không có hình thu nhỏ. Điều này sẽ tạo ấn tượng rằng các bài đăng không có hình ảnh nổi bật đang được kéo vào. Đây không phải là trường hợp, chúng có một hình ảnh đặc trưng, ​​nó chỉ không có sẵn vì lỗi bạn đã mắc phải khi nhập.

Xóa bài đăng của bạn và nhập lại bằng các cài đặt chính xác.

Ngoài ra để chứng minh quan điểm, bạn không thực sự kiểm tra bài viết, luôn luôn kiểm tra, ví dụ:

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

Nếu bạn chưa chọn hộp kiểm, bạn sẽ nhận được hình ảnh cho biết họ có hình ảnh nổi bật, nhưng không có hình ảnh nào được hiển thị


1
Tôi nghi ngờ đây là lý do câu trả lời tôi cung cấp không hoạt động như mong đợi. các WordPress Suicide plugin là khá hữu ích để xóa tất cả các nội dung.
xe đạp vào

Tôi chắc chắn đã kiểm tra hộp đó. Tuy nhiên theo kinh nghiệm của tôi, nó chưa bao giờ làm việc cho tôi. Tất cả các hình ảnh được liên kết trở lại trang web bên ngoài. Tôi đã sử dụng plugin Nhập hình ảnh bên ngoài ( wordpress.org/extend/plugins/import-external-images ) để lưu trữ hình ảnh cục bộ và đính kèm.
harryg

Tôi cũng có suy nghĩ tương tự, tôi chắc chắn đã kiểm tra hộp, tại sao nó không hoạt động? Tôi đã có nó từ khách hàng và rất dễ bị nhầm, vì vậy hãy xóa bài đăng của bạn, nhập lại và đảm bảo rằng nó đã được kiểm tra, và nếu nó vẫn không hoạt động thì bạn có thể loại trừ. Mặt khác, có một Neil DeGrasse Tyson nói về trí nhớ của con người yếu đuối đến mức nào. Ngay bây giờ tôi có thể yêu cầu bạn bỏ chọn hộp kiểm thứ hai và có lẽ bạn cũng sẽ thấy nó (nhưng không có)
Tom J Nowell

và trong lúc này, hãy kết thúc the_post_thumbnailbằng một has_thumbnailcuộc gọi và thêm một trường hợp khác để bạn chắc chắn biết rõ rằng bài đăng không có hình ảnh đặc trưng
Tom J Nowell

Cũng đảm bảo rằng máy chủ của bạn có thể truy cập máy chủ từ xa. Nếu máy chủ của bạn không thể lấy các yêu cầu từ xa, nó sẽ không thể nhập. Bạn cũng có thể cần phải xóa các tệp đính kèm phương tiện đã lấy
Tom J Nowell

23

Kể từ WordPress 3.5, các tham số Meta Query hỗ trợ EXISTSNOT EXISTSnhư các toán tử so sánh. Trong trường hợp bạn đang sử dụng những thứ này, bạn có thể bỏ qua valuemột phần của truy vấn meta. Hãy thử các đối số sau đây cho truy vấn của bạn:

$args = array(
   'post_type'  => 'post',
   'posts_per_page' => 6,
    'meta_query' => array(
        array(
         'key' => '_thumbnail_id',
         'compare' => 'EXISTS'
        ),
    )
);

Cám ơn vì sự gợi ý. Bây giờ tôi nhận được 6 bài viết nhưng vẫn nhận được bài viết mà không có hình thu nhỏ.
harryg

Tôi đã thử nghiệm điều này và nó đã làm việc cho tôi. Nhưng tôi đã nhận thấy rằng nó sẽ trả về các thực thể có bộ meta, nhưng vì một số lý do mà ID đính kèm không chính xác. Vì vậy, hãy kiểm tra kỹ xem bài viết của bạn có các hình ảnh nổi bật không. Mặt khác, tôi không biết vấn đề khác có thể là gì.
xe đạp vào

harryg, bạn có thể xác nhận bạn đang sử dụng phiên bản 3.5 trở lên không?
Tom J Nowell

Có, tôi đang chạy phiên bản mới nhất của WordPress - được cài đặt mới trên máy chủ dev cục bộ của tôi dưới dạng thiết lập mạng (multisite).
harryg

2
Chỉ cần một số thông tin bổ sung: Có một lỗi chưa được giải quyết, xem vé trac 23268 , điều này khiến cho việc sử dụng một giá trị nếu NOT EXISTSđược sử dụng là cần thiết .
Nicolai
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.