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

harryg
źródło
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

Tom J Nowell
źródło
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'
        ),
    )
);
helgatheviking
źródło
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