Messaggi di query solo con immagine in primo piano


15

Voglio interrogare 6 post, ma solo quelli a cui è allegata un'immagine in primo piano. Sto usando il meta_keymetodo per questo con WP_Querycome tale:

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

Seguito da

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

Questo non sembra funzionare. La query restituisce più di 6 post e anche quelli che non hanno un'immagine in primo piano. Qualche idea su cosa ho sbagliato qui?

@chip: var_dump($query);dà un grande risultato quindi l'ho pubblicato in un pastebin


2
Lo snippet di codice ha funzionato per me come previsto. Forse l'errore si trova in un'altra parte del codice.
Ralf912

Da cosa ottieni var_dump( $query )?
Chip Bennett

Come ulteriore cosa a cui ho pensato: i post sono stati importati sul mio server locale da un sito live utilizzando WordPress esportatore / importatore. Tutti i post originali presentavano immagini che erano ovviamente perse nel processo di importazione. Ciò potrebbe significare che, sebbene le immagini in primo piano siano state rimosse, le meta-chiavi sono rimaste ancora causando errori nella query?
harryg

Quando hai eseguito l'importazione, hai selezionato la casella per scaricare e allegare tutti gli allegati / supporti? In caso contrario, le immagini in primo piano non funzioneranno. I post avranno un'immagine in primo piano, ma farà riferimento a un allegato che non esiste e quindi non verrà mai visualizzato
Tom J Nowell

Sì, ho selezionato la casella durante l'importazione.
harryg

Risposte:


3

Quando si esegue l'importatore, è necessario selezionare la casella di controllo per scaricare e importare tutti i supporti / allegati.

In caso contrario, i post avranno comunque un set di immagini in primo piano, ma l'allegato a cui fanno riferimento non sarà valido e qualsiasi tentativo di chiamata the_post_thumbnailfallirà. Usando il tuo codice otterrai solo il titolo del post e nessuna miniatura. Ciò darebbe l'impressione che i post che non presentano immagini in primo piano vengano inseriti. Non è così, hanno un'immagine in primo piano, non è disponibile a causa dell'errore che hai commesso durante l'importazione.

Elimina i tuoi post e reimporta utilizzando le impostazioni corrette.

Inoltre, per dimostrare il punto, non hai fatto alcun tentativo di controllare effettivamente i post, controlla sempre ad esempio:

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

Se non hai selezionato la casella di controllo, otterrai immagini che indicano che hanno un'immagine in primo piano, ma non viene mostrata alcuna immagine


1
Sospetto che questo sia il motivo per cui la risposta che ho fornito non funziona come previsto. il plugin WordPress Suicide è piuttosto utile per eliminare tutto il contenuto.
Helgatheviking

Ho sicuramente selezionato quella casella. Tuttavia nella mia esperienza non ha mai funzionato per me. Tutte le immagini sono state ricollegate al sito esterno. Ho usato il plug-in Import External Images ( wordpress.org/extend/plugins/import-external-images ) per archiviare le immagini localmente e allegarle.
harryg

Ho avuto lo stesso pensiero, ho sicuramente selezionato la casella, perché non funziona ancora? L'ho ricevuto dai clienti ed è così facile sbagliare, quindi elimina i tuoi post, reimporta e assicurati che sia controllato e se ancora non funziona, puoi escluderlo. Altrimenti c'è un discorso di Neil DeGrasse Tyson su quanto sia pateticamente debole la memoria umana. In questo momento potrei chiederti di deselezionare la seconda casella e probabilmente ti ricorderesti di averlo visto (ma non ce n'è uno)
Tom J Nowell

e nel frattempo, concludere the_post_thumbnailcon una has_thumbnailchiamata e aggiungere un altro caso in modo da sapere in modo inequivocabile che il post non ha un'immagine in primo piano
Tom J Nowell

Assicurati anche che il tuo server sia in grado di raggiungere il server remoto. Se il tuo server non è in grado di raccogliere richieste remote, non sarà in grado di importare. Potrebbe essere necessario eliminare gli allegati multimediali già acquisiti
Tom J Nowell

24

A partire da WordPress 3.5, i parametri Meta Query supportano EXISTSe NOT EXISTScome operatori di confronto. Nel caso in cui si utilizzino questi, è possibile omettere la valueparte della meta query. Prova i seguenti argomenti per la tua query:

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

Grazie per il suggerimento Ora ricevo i 6 post ma continuo a ricevere post senza miniature.
harryg

Ho provato questo e ha funzionato per me. Ma ho notato che restituirà entità che hanno il meta set, ma per qualche ragione l'ID allegato non è corretto. Quindi ricontrolla che i tuoi post abbiano le immagini in evidenza impostate. Altrimenti, non so cos'altro potrebbe essere il problema.
helgatheviking

harryg, puoi confermare che stai usando la versione 3.5 o successive?
Tom J Nowell

Sì, sto utilizzando l'ultima versione di WordPress, appena installata sul mio server di sviluppo locale come configurazione di rete (multisito).
harryg

2
Solo alcune informazioni aggiuntive: c'è un bug non risolto, vedi trac ticket 23268 , che rende necessario usare un valore se NOT EXISTSviene usato.
Nicolai,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.