Odpytuj posty tylko z polecanym obrazem


15

Chcę wysłać zapytanie do 6 postów, ale tylko tych z dołączonym polecanym obrazem. Używam meta_keydo tego metody z WP_Query:

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

Śledzony przez

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

To nie działa. Zapytanie zwraca więcej niż 6 postów, a także te, które nie mają polecanego obrazu. Jakieś pomysły, co tutaj mylę?

@chip: var_dump($query);daje duży wynik, więc opublikowałem go w paczce


2
Fragment kodu działał dla mnie zgodnie z oczekiwaniami. Być może błąd dotyczy innej części kodu.
Ralf912

Co otrzymasz od var_dump( $query )?
Chip Bennett

Jako dodatkową rzecz, o której pomyślałem - posty zostały zaimportowane na mój lokalny serwer z działającej witryny za pomocą eksportera / importera wordpress. Wszystkie oryginalne posty zawierały zdjęcia, które zostały oczywiście utracone podczas importowania. Czy to może oznaczać, że mimo usunięcia wyróżnionych obrazów meta-klucze nadal pozostały, powodując problemy z zapytaniem?
harryg

Czy po uruchomieniu importowania zaznaczyłeś pole, aby pobrać i załączyć wszystkie załączniki / multimedia? Jeśli tego nie zrobisz, Twoje wyróżnione obrazy nie będą działać. Posty będą miały polecany obraz, ale będą odnosić się do załącznika, który nie istnieje, a więc nigdy nie będzie wyświetlany
Tom J Nowell

Tak, zaznaczyłem pole podczas importowania.
harryg

Odpowiedzi:


3

Podczas uruchamiania importera musisz zaznaczyć pole wyboru, aby pobrać i zaimportować wszystkie multimedia / załączniki.

Jeśli tego nie zrobisz, posty będą nadal miały opisywany obraz, ale załącznik, do którego się odnoszą, będzie nieprawidłowy, a każda próba połączenia the_post_thumbnailsię nie powiedzie. Korzystając z kodu otrzymasz tylko tytuł postu i brak miniatury. Sprawiałoby to wrażenie, że są wciągane posty, które nie mają polecanego obrazu. To nie jest tak, mają polecany obraz, po prostu nie jest dostępny z powodu błędu, który popełniłeś podczas importowania.

Usuń swoje posty i ponownie zaimportuj, używając poprawnych ustawień.

Aby zademonstrować punkt, nie próbowałeś faktycznie sprawdzać postów, zawsze sprawdzaj np .:

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

Jeśli nie zaznaczyłeś pola wyboru, otrzymasz obrazy z informacją, że mają polecany obraz, ale żaden obraz nie jest wyświetlany


1
Podejrzewam, że to jest powód, dla którego udzielona odpowiedź nie działa zgodnie z oczekiwaniami. WordPress Suicide wtyczki jest bardzo pomocne dla usuwania całej zawartości.
helgatheviking

Zdecydowanie sprawdziłem to pole. Jednak z mojego doświadczenia nigdy mi się nie udało. Wszystkie obrazy zostały połączone z powrotem do strony zewnętrznej. Użyłem wtyczki Importuj obrazy zewnętrzne ( wordpress.org/extend/plugins/import-external-images ), aby przechowywać obrazy lokalnie i dołączać je.
harryg

Mam tę samą myśl, zdecydowanie zaznaczyłem pole, dlaczego nadal nie działa? Mam go od klientów i tak łatwo się pomylić, więc usuń swoje posty, ponownie zaimportuj i upewnij się, że jest zaznaczone, a jeśli nadal nie działa, możesz to wykluczyć. W przeciwnym razie Neil DeGrasse Tyson mówi o żałośnie słabej ludzkiej pamięci. W tej chwili mógłbym poprosić cię o odznaczenie drugiego pola wyboru i pewnie też byś o tym pamiętał (ale nie ma takiego)
Tom J Nowell

aw międzyczasie, okład the_post_thumbnailz has_thumbnailzaproszenia i dodać jeszcze sprawę tak, że na pewno w sposób jednoznaczny, że post nie posiada funkcjonalny obraz
Tom J Nowell

Upewnij się także, że Twój serwer może uzyskać dostęp do zdalnego serwera. Jeśli Twój serwer nie może pobrać zdalnych żądań, nie będzie mógł zaimportować. Konieczne może być usunięcie już pobranych załączników multimedialnych
Tom J Nowell

24

Począwszy od WordPress 3.5 obsługa Meta Query Parameters obsługuje EXISTSi NOT EXISTSoperatory porównania. W przypadku ich użycia możesz pominąć valueczęść zapytania meta. Wypróbuj następujące argumenty dla swojego zapytania:

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

Dzieki za sugestie. Teraz dostaję 6 postów, ale wciąż otrzymuję posty bez miniatur.
harryg

Przetestowałem to i zadziałało dla mnie. Zauważyłem jednak, że zwróci jednostki, które mają ustawiony meta, ale z jakiegoś powodu identyfikator załącznika nie jest poprawny. Sprawdź dokładnie, czy Twoje posty mają ustawione polecane obrazy. W przeciwnym razie nie wiem, co jeszcze może być problem.
helgatheviking

harryg, czy możesz potwierdzić, że używasz wersji 3.5 lub nowszej?
Tom J Nowell

Tak, korzystam z najnowszej wersji WordPress - świeżo zainstalowanej na moim lokalnym serwerze deweloperskim jako instalacja sieciowa (wielostanowiskowa).
harryg

2
Tylko kilka dodatkowych informacji: Istnieje nierozwiązany błąd, patrz trac bilet 23268 , który wymaga użycia wartości, jeśli NOT EXISTSjest używana.
Nicolai
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.