Come usare the_excerpt() in una pagina WordPress

15 mag 2012, 00:50:17
Visualizzazioni: 985
Voti: 0

Sto cercando di utilizzare la funzione PHP the_excerpt() per mostrare estratti dai post recenti del blog in una pagina di destinazione principale senza successo. Qualche idea?

<div id="home_news" class="prefix_9 grid_3">
    <div id="newsbox" style="display: block;">
        <div id="news">
            <h2>Benvenuto</h2>
            <div id="news_content">Benvenuto su... torna presto per una nuova selezione di dipinti ad olio, ultime stampe e biglietti di auguri</a>. 

<?php 
// Crea una nuova query per i post della categoria 'blog'
$my_query = new WP_Query('category_name=blog&posts_per_page=1'); 

// Loop attraverso i post trovati
while ($my_query->have_posts()) : $my_query->the_post(); 

    $do_not_duplicate = $post->505;
    // Mostra l'estratto del post
    the_excerpt();

endwhile; ?> 

            </div>
        </div>
    </div>
</div>
0
Tutte le risposte alla domanda 2
19

the_excerpt() non funzionerà in una landing page. Deve essere utilizzato all'interno del loop del post per poter funzionare.

All'interno del loop, WordPress popola una variabile globale $post con le informazioni sul post corrente. Poi, vari tag del template fanno riferimento a questa variabile globale e restituiscono il contenuto.


In base alle modifiche sopra...

Hai quasi strutturato correttamente il tuo loop. Ma invece, dovrai:

  1. Creare la tua query personalizzata per ottenere l'ultimo post
  2. Visualizzare il post
  3. Ripristinare la query originale

Il codice qui sotto dovrebbe fare ciò di cui hai bisogno:

<div id="home_news" class="prefix_9 grid_3">
    <div id="newsbox" style="display: block;">
        <div id="news">
            <h2>Benvenuto</h2>
            <div id="news_content">Benvenuto su... torna presto per una nuova selezione di dipinti a olio, ultime stampe e biglietti augurali</a>. 

<?php 
// Crea una nuova query e ottieni l'ultimo post dalla categoria "blog"
$my_query = new WP_Query( 'category_name=blog&posts_per_page=1' ); 

// Se abbiamo un post, popola le variabili globali necessarie ed esegui il loop
if ( $my_query->have_posts() ) : while ( $my_query->have_posts() ) : $my_query->the_post(); 

    // Mostra l'estratto del post nella pagina
    the_excerpt();

endwhile; endif;

// Reimposta i dati del loop principale così le variabili globali avranno i valori corretti
wp_reset_postdata();
?> 

            </div>
        </div>
    </div>
</div>
15 mag 2012 01:16:57
Commenti

Grazie per la tua risposta. È possibile aggiungere il loop all'interno di una pagina? Ho provato a sperimentare... Senza successo finora.

Charles Charles
15 mag 2012 16:02:57

Sì. Dai un'occhiata agli esempi di loop multipli nel Codex.

EAMann EAMann
15 mag 2012 16:41:38

Ho modificato la mia domanda perché non riuscivo a far apparire il formato markdown nel mio commento. È necessario specificare il post->ID? L'ID è una variabile globale con nome?

Charles Charles
17 mag 2012 02:26:31

Dopo aver chiamato the_post() popoli una variabile globale $post che ha un membro ID.

EAMann EAMann
17 mag 2012 06:46:02

ok - quindi ho sostituito l'ID con un numero del post?

Charles Charles
17 mag 2012 15:50:31

Come trovo l'ID numerico della pagina specifica?

Charles Charles
17 mag 2012 16:01:46

get_the_ID() restituisce l'ID numerico del post corrente quando utilizzato all'interno del loop.

EAMann EAMann
17 mag 2012 18:19:23

Ho inserito il valore numerico. Nessun risultato. Altre idee? Consigli su come risolvere il problema?

Charles Charles
17 mag 2012 20:22:35

Vedi le mie modifiche. All'interno del loop (dove ho the_excerpt()) puoi utilizzare qualsiasi tag template standard di cui hai bisogno. Se ti serve l'ID numerico, usa get_the_ID() per ottenerlo o the_ID() per fare echo. Se hai bisogno del titolo, usa get_the_title() come al solito.

EAMann EAMann
17 mag 2012 21:38:38

Teoricamente il codice sopra dovrebbe essere valido e funzionare. Ho una categoria intitolata 'blog'. Sono un po' preoccupato di fare modifiche. Ho lasciato il codice così com'è e l'ho inserito nella pagina, ma ancora non viene renderizzato. C'è altro che devo fare?

Charles Charles
18 mag 2012 00:53:44

Guardando il tuo sito, sembra che il PHP non venga elaborato... quindi la mia domanda è: dove stai inserendo questo codice?

EAMann EAMann
18 mag 2012 00:59:01

Sto inserendo il codice all'interno di una pagina, nella sezione HTML.

Charles Charles
18 mag 2012 17:31:09

OK, ecco perché non funziona. Il codice PHP viene rimosso nell'editor HTML/Visuale di WordPress. Devi aggiungere questo codice direttamente al template della pagina utilizzato dalla landing page oppure installare un plugin per l'esecuzione PHP in WordPress per far funzionare il codice PHP inline.

EAMann EAMann
18 mag 2012 18:34:42

Capito. Ci sono quasi. Solo che ora sto ottenendo un altro errore... Idee? http://www.chazsouthard.com/art/

Charles Charles
18 mag 2012 21:15:39

Errore di battitura nel mio codice (ora corretto sopra). Dovrebbe essere wp_reset_postdata()

EAMann EAMann
18 mag 2012 21:16:35

Ora funziona, ma è in conflitto con il CSS. C'è un modo per limitare il numero di caratteri nell'estratto? Penso che sia questo a causare problemi con il codice.

Charles Charles
19 mag 2012 17:14:23

Finalmente ho risolto. Grazie per avermi supportato durante la confusione. C'è un modo per inserire correttamente una miniatura all'interno dell'estratto?

Charles Charles
20 mag 2012 02:31:40

No... ma questo non significa che non puoi pubblicare una miniatura + un estratto in un template. Ma questa è una domanda separata, quindi dovresti davvero aprire una nuova domanda...

EAMann EAMann
20 mag 2012 07:02:12
Mostra i restanti 14 commenti
0

Anche se inizialmente non era chiaro nel post originale, penso che questa possa essere una buona soluzione. Basta creare uno shortcode per inserire l'estratto nel corpo della pagina. (Questa non è una buona idea se vuoi farlo su ogni pagina. È invece utile se vuoi utilizzarlo occasionalmente su alcune pagine nel corpo.)

Ecco il codice da inserire nel tuo functions.php:

function the_excerpt_shortcode() {
    return get_the_excerpt();
}
add_shortcode( 'the_excerpt', 'the_excerpt_shortcode' );

Una volta fatto, inserisci semplicemente questo nel corpo della tua pagina:

[the_excerpt]

E il gioco è fatto.

Se stai utilizzando Twenty Ten, Twenty Eleven o altri temi che agganciano il filtro excerpt_more, potresti dover modificare lo shortcode per rimuovere un link automatico "Continua a leggere...", ma per molti temi non è necessario. Considera questo un punto di partenza.

18 mag 2012 22:08:53