Query dei post solo con immagine in evidenza

3 mar 2013, 20:52:27
Visualizzazioni: 33.7K
Voti: 17

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

5
Commenti

Lo snippet di codice ha funzionato come previsto. Forse l'errore è in un'altra parte del codice.

Ralf912 Ralf912
3 mar 2013 21:40:51

Cosa ottieni da var_dump( $query )?

Chip Bennett Chip Bennett
3 mar 2013 22:07:45

Come ulteriore pensiero - i post sono stati importati sul mio server locale da un sito live utilizzando l'export/import di WordPress. I post originali avevano tutte immagini in evidenza che ovviamente sono state perse nel processo di importazione. Potrebbe significare che, nonostante le immagini in evidenza siano state rimosse, i meta key siano rimasti causando problemi alla query?

harryg harryg
4 mar 2013 01:39:38

Quando hai eseguito l'importazione, hai spuntato la casella per scaricare e allegare tutti gli allegati/media? Se non l'hai fatto, le tue immagini in evidenza non funzioneranno. I post avranno un'immagine in evidenza, ma farà riferimento a un allegato che non esiste e quindi non verrà mai visualizzato

Tom J Nowell Tom J Nowell
4 mar 2013 02:27:53

Sì, ho spuntato la casella durante l'importazione.

harryg harryg
4 mar 2013 11:16:17
Tutte le risposte alla domanda 2
5
31

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'
        ),
    )
);
3 mar 2013 21:59:12
Commenti

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

harryg harryg
4 mar 2013 01:36:28

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.

helgatheviking helgatheviking
4 mar 2013 02:01:26

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

Tom J Nowell Tom J Nowell
4 mar 2013 02:25:50

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

harryg harryg
4 mar 2013 11:15:22

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

Nicolai Grossherr Nicolai Grossherr
1 mar 2014 00:28:17
8

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

4 mar 2013 02:29:59
Commenti

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.

helgatheviking helgatheviking
4 mar 2013 06:48:01

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.

harryg harryg
4 mar 2013 11:14:14

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)

Tom J Nowell Tom J Nowell
4 mar 2013 11:52:50

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

Tom J Nowell Tom J Nowell
4 mar 2013 11:53:56

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 J Nowell Tom J Nowell
4 mar 2013 12:00:50

@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

harryg harryg
4 mar 2013 12:46:09

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

Tom J Nowell Tom J Nowell
4 mar 2013 13:08:49

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

harryg harryg
4 mar 2013 23:35:17
Mostra i restanti 3 commenti