Query dei post solo con immagine in evidenza
Voglio fare una query di 6 post, ma solo quelli che hanno un'immagine in evidenza allegata. Sto usando il metodo meta_key
con WP_Query
in questo modo:
$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 sta restituendo più di 6 post e anche quelli che non hanno un'immagine in evidenza. Qualche idea su cosa ho sbagliato?
@chip: var_dump($query);
fornisce un risultato molto lungo quindi l'ho pubblicato su pastebin

A partire da WordPress 3.5, i Parametri Meta Query supportano gli operatori di confronto EXISTS
e NOT EXISTS
. Quando si utilizzano questi operatori, è possibile omettere la parte value
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 ottengo i 6 post ma continuo a ricevere post senza miniature.

Ho testato questo e ha funzionato per me. Ma ho notato che restituirà entità che hanno il meta impostato, ma per qualche motivo l'ID dell'allegato non è corretto. Quindi ricontrolla che i tuoi post abbiano le immagini in evidenza impostate. Altrimenti, non so quale altro problema potrebbe esserci.

harryg, puoi confermare che stai usando la versione 3.5 o successiva?

Sì, sto utilizzando l'ultima versione di WordPress - installata di recente sul mio server di sviluppo locale come configurazione di rete (multisite).

Solo alcune informazioni aggiuntive: C'è un bug non risolto, vedi trac ticket 23268, che rende necessario utilizzare un valore se viene usato NOT EXISTS
.

Quando esegui l'importatore, devi selezionare la casella di controllo per scaricare e importare tutti i media/allegati, e il server originale deve essere raggiungibile dal server che esegue l'importazione.
Se non lo fai, i post non avranno un'immagine in evidenza valida e non appariranno nel tuo loop. Qualsiasi tentativo di chiamare the_post_thumbnail
fallirà, dando l'impressione che non abbiano un'immagine in evidenza.
Per risolvere, elimina i tuoi post e reimportali usando le impostazioni corrette, assicurandoti che il vecchio server sia ancora accessibile al suo URL originale.
Per dimostrare il punto, non hai mai verificato effettivamente i post. Controlla sempre, ad esempio:
if ( $query->have_posts() ) { // non hai mai verificato se non sono stati trovati post
while($query->have_posts()) { // la sintassi alternativa non funziona con la maggior parte degli IDE
// ogni istruzione dovrebbe essere su una riga separata
$query->the_post();
// qui servono solo i tag di apertura/chiusura, non su ogni riga, risparmia tempo nella digitazione
?><h2><?php the_title(); ?></h2><?php
// mostra la miniatura solo se effettivamente presente
if ( has_post_thumbnail() ) {
echo '<p>il post dichiara di avere un\'immagine in evidenza</p>'; // verifica aggiuntiva
the_post_thumbnail('thumbnail');
} else {
echo '<p>questo post non ha un\'immagine in evidenza</p>';
}
}
} else {
echo '<p>nessun post trovato</p>';
}
Se non hai selezionato la casella di controllo, otterrai post che dichiarano di avere un'immagine in evidenza, ma nessuna immagine verrà mostrata

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 tutti i contenuti.

Ho sicuramente spuntato quella casella. Tuttavia, nella mia esperienza non ha mai funzionato per me. Tutte le immagini erano collegate nuovamente al sito esterno. Ho utilizzato il plugin Import External Images(http://wordpress.org/extend/plugins/import-external-images/) per archiviare le immagini localmente e allegarle.

Ho avuto lo stesso pensiero, ho sicuramente spuntato la casella, perché non funziona ancora? L'ho avuto da clienti, ed è così facile sbagliare, quindi elimina i tuoi post, reimporta e assicurati che sia spuntato, e se ancora non funziona allora 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 di spunta e probabilmente ricorderesti di averla vista anche quella (ma non ce n'è una)

e nel frattempo, avvolgi the_post_thumbnail
con una chiamata has_thumbnail
e aggiungi un caso else così da sapere con certezza che il post non ha un'immagine in evidenza

Assicurati anche che il tuo server sia in grado di raggiungere il server remoto. Se il tuo server non riesce a effettuare richieste remote, non sarà in grado di importare. Potresti dover eliminare gli allegati multimediali già scaricati

@Tom grazie per i tuoi commenti. So che dici che è facile dimenticarsi di fare qualcosa, ma IO SO di aver spuntato la casella. Il fatto è che molto spesso non ha funzionato per me; spunto la casella ma nessuna delle immagini viene importata e mi ritrovo con tutti i post che hanno immagini collegate esternamente. Il mio server è un semplice setup Xampp in esecuzione su MacOS che ha accesso remoto. La mia sensazione è che sia una combinazione del fallimento della casella di spunta e del plugin che ho usato per scaricare tutte le immagini che non è riuscito a "mettere in evidenza" correttamente le immagini. Proverò i tuoi suggerimenti stasera e ti farò sapere

XAMPP è uno strumento solo per Windows? Piuttosto che discutere su ciò che pensi di sapere e sulle tue sensazioni, dimostralo tramite il codice di debug e fornisci dati utili, chiari e inequivocabili. Le lettere maiuscole non ti aiuteranno. Sono stato in grado di replicare questo problema molte volte localmente e sui server dei clienti controllando o non controllando, e ho commesso l'errore io stesso, e attualmente è la teoria più accurata considerando le informazioni fornite. Se non sei d'accordo, fornisci nuove informazioni in modo che possiamo arrivare a una teoria migliore

No, Xampp funziona bene anche su Mac! Purtroppo non ci sono prove concrete che io abbia cliccato o meno la casella di controllo, ma questo è irrilevante. Il problema è dovuto al fatto che l'importazione dei media è fallita - il post pensa di avere un'immagine in evidenza poiché il meta tag è presente, ma non c'è alcuna immagine effettiva. Aggiungere una nuova immagine in evidenza e rimuoverla impedisce al post di apparire, dimostrando che la query funziona, che è ciò che volevo sapere. Grazie per i suggerimenti
