Beiträge nur mit Bild abfragen

15

Ich möchte 6 Posts abfragen, aber nur die, an die ein Bild angehängt ist. Ich verwende hierfür die meta_keyMethode mit WP_Query:

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

gefolgt von

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

Das scheint nicht zu funktionieren. Die Abfrage gibt mehr als 6 Beiträge zurück und auch solche, die kein spezielles Bild haben. Irgendwelche Ideen, was ich hier falsch gemacht habe?

@chip: var_dump($query);gibt ein großes Ergebnis, also habe ich es in einem Pastebin gepostet

harryg
quelle
2
Das Code-Snippet hat bei mir wie erwartet funktioniert. Möglicherweise liegt der Fehler in einem anderen Teil des Codes.
Ralf912
Von was bekommst var_dump( $query )du
Chip Bennett
Als Extra habe ich darüber nachgedacht - die Posts wurden von einer Live-Site mit WordPress Exporter / Importer auf meinen lokalen Server importiert. Die ursprünglichen Beiträge enthielten alle Bilder, die beim Import offensichtlich verloren gingen. Konnte das bedeuten, dass die Metaschlüssel trotz der Entfernung der vorgestellten Bilder weiterhin die Abfrage durcheinander brachten?
harryg
Haben Sie beim Ausführen des Imports das Kontrollkästchen aktiviert, um alle Anhänge / Medien herunterzuladen und anzuhängen? Wenn Sie dies nicht getan haben, funktionieren Ihre vorgestellten Bilder nicht. Die Posts enthalten ein Bild mit einem bestimmten Merkmal, beziehen sich jedoch auf einen nicht vorhandenen Anhang und werden daher nie angezeigt
Tom J Nowell
Ja, ich habe das Kästchen beim Import angekreuzt.
Harryg

Antworten:

3

Wenn Sie den Importer ausführen, müssen Sie das Kontrollkästchen aktivieren, um alle Medien / Anhänge herunterzuladen und zu importieren.

Wenn Sie dies nicht tun, wird für die Posts weiterhin ein Bildsatz mit Features angezeigt. Der Anhang, auf den sie verweisen, ist jedoch ungültig, und jeder Anrufversuch the_post_thumbnailschlägt fehl. Wenn Sie Ihren Code verwenden, erhalten Sie nur den Post-Titel und kein Thumbnail. Dies würde den Eindruck erwecken, als würden Posts ohne ein spezielles Bild eingezogen. Dies ist nicht der Fall, sie haben ein spezielles Bild, es ist nur aufgrund des Fehlers, den Sie beim Importieren gemacht haben, nicht verfügbar.

Löschen Sie Ihre Beiträge und importieren Sie sie erneut mit den richtigen Einstellungen.

Um den Punkt zu demonstrieren, haben Sie nicht versucht, die Posts tatsächlich zu überprüfen. Überprüfen Sie immer zB:

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

Wenn Sie das Kontrollkästchen nicht aktiviert haben, werden Bilder mit dem Hinweis angezeigt, dass es sich um ein ausgewähltes Bild handelt, es wird jedoch kein Bild angezeigt

Tom J Nowell
quelle
1
Ich vermute, dies ist der Grund, warum die von mir angegebene Antwort nicht wie erwartet funktioniert. Das WordPress-Suicide- Plugin ist sehr hilfreich, um alle Inhalte zu löschen.
Helgatheviking
Ich habe dieses Kästchen definitiv angekreuzt. Nach meiner Erfahrung hat es jedoch nie bei mir funktioniert. Alle Bilder wurden auf die externe Seite verlinkt. Ich habe das Plugin Externe Bilder importieren ( wordpress.org/extend/plugins/import-external-images ) verwendet, um die Bilder lokal zu speichern und anzuhängen.
Harryg
Ich hatte den gleichen Gedanken, ich habe definitiv die Box überprüft, warum funktioniert es noch nicht? Ich habe es von Kunden bekommen, und es ist so einfach, Fehler zu machen. Löschen Sie also Ihre Posts, importieren Sie sie erneut und stellen Sie sicher, dass sie aktiviert sind. Wenn es immer noch nicht funktioniert, können Sie es ausschließen. Ansonsten spricht Neil DeGrasse Tyson darüber, wie erbärmlich schwach das menschliche Gedächtnis ist. Im Moment könnte ich Sie bitten, das zweite Kontrollkästchen zu deaktivieren, und Sie werden sich wahrscheinlich daran erinnern, dass Sie das auch gesehen haben (aber es gibt keines)
Tom J Nowell
In der Zwischenzeit können Sie the_post_thumbnaileinen has_thumbnailAnruf tätigen und einen weiteren Fall hinzufügen, sodass Sie zweifelsohne wissen, dass der Beitrag kein spezielles Bild enthält
Tom J Nowell
Stellen Sie außerdem sicher, dass Ihr Server den Remote-Server erreichen kann. Wenn Ihr Server keine Remoteanforderungen abrufen kann, kann er keine importieren. Möglicherweise müssen Sie die bereits erfassten Medienanhänge löschen
Tom J Nowell
23

Ab Wordpress 3.5, die Meta - Suchparameter Unterstützung EXISTSund NOT EXISTSals Vergleichsoperatoren. In dem Fall, in dem Sie diese verwenden, können Sie das weglassenvalue Teil der Meta-Abfrage . Versuchen Sie die folgenden Argumente für Ihre Abfrage:

$args = array(
   'post_type'  => 'post',
   'posts_per_page' => 6,
    'meta_query' => array(
        array(
         'key' => '_thumbnail_id',
         'compare' => 'EXISTS'
        ),
    )
);
helgatheviking
quelle
Danke für den Vorschlag. Ich bekomme jetzt die 6 Beiträge, aber immer noch Beiträge ohne Vorschaubilder.
harryg
Ich habe das getestet und es hat bei mir funktioniert. Ich habe jedoch festgestellt, dass Entitäten mit dem Meta-Set zurückgegeben werden, aber aus irgendeinem Grund ist die Anhangs-ID nicht korrekt. Vergewissern Sie sich also, dass in Ihren Posts die ausgewählten Bilder eingestellt sind. Ansonsten weiß ich nicht, woran das sonst liegen könnte.
Helgatheviking
harryg, kannst du bestätigen, dass du v3.5 oder neuer verwendest?
Tom J Nowell
Ja, ich verwende die neueste Version von WordPress, die auf meinem lokalen Entwickler-Server als Netzwerk-Setup (für mehrere Standorte) installiert ist.
Harryg
2
Nur ein paar zusätzliche Informationen: Es gibt einen ungelösten Fehler, siehe Trac-Ticket 23268 , der die Verwendung eines Wertes erforderlich macht, wenn NOT EXISTSverwendet wird.
Nicolai