Usare the_content fuori dal loop

30 apr 2014, 23:00:20
Visualizzazioni: 14.5K
Voti: 2

Stavo cercando di ottenere i primi 100 caratteri del contenuto nell'header, e ho usato il seguente snippet per ottenere i primi 100 caratteri nel loop, ma è possibile ottenere il valore fuori dal loop:

$cstring = get_the_content( '' );
$newcString = substr( $cstring, 0, 100 );
echo'<p>' . $newcString . '</p>';
0
Tutte le risposte alla domanda 4
4

Ho scritto un articolo su questo argomento qui, ma ecco un riassunto dei punti principali:

  • the_content può essere utilizzato solo 'all'interno del loop'
  • 'all'interno del loop' può essere correttamente 'simulato' solo chiamando setup_postdata() e global $post.
  • Successivamente è necessario ripulire il tutto chiamando wp_reset_postdata()

Il codice seguente fornisce una funzione per recuperare il contenuto di un post dal suo ID. Differisce dalla risposta di @NickYoung in quanto il contenuto che ricevi non è quello memorizzato nella colonna post_content della tabella dei post, ma piuttosto quel contenuto dopo essere passato attraverso il filtro the_content (ad esempio con shortcodes elaborati, ecc.).

Il codice

/**
 * Visualizza il contenuto del post. Facoltativamente permette di passare l'ID del post
 * @uses the_content()
 * @link http://stephenharris.info/get-post-content-by-id/
 * @link https://wordpress.stackexchange.com/questions/142957/use-the-content-outside-the-loop
 * @param int $id Opzionale. ID del post.
 * @param string $more_link_text Opzionale. Testo per il link "continua a leggere".
 * @param bool $stripteaser Opzionale. Rimuovi il contenuto teaser prima del testo "continua a leggere". Default è false.
 */
function sh_the_content_by_id( $post_id=0, $more_link_text = null, $stripteaser = false ){
    global $post;
    $post = get_post($post_id);
    setup_postdata( $post, $more_link_text, $stripteaser );
    the_content();
    wp_reset_postdata( $post );
}
4 mag 2014 13:28:22
Commenti

È un ottimo punto che non sia filtrato. In quel caso potresti usare $post->post_content_filtered penso, giusto? Non ho mai usato questa versione prima ma sembra che potrebbe funzionare.

Nick Young Nick Young
6 mag 2014 00:14:08

Ben fatto. $post->post_content non passa attraverso i filtri

bysanchy bysanchy
26 ott 2016 07:38:49

Questa dovrebbe essere la risposta accettata.

Christine Cooper Christine Cooper
20 mar 2018 14:27:38

wp_reset_postdata( ) non accetta alcun parametro. Forse lo faceva, non lo so.

Felipe Alameda A Felipe Alameda A
24 lug 2019 04:34:34
0

Se stai cercando di farlo per la pagina corrente in cui ti trovi, puoi semplicemente utilizzare questo codice:

global $post;
$content = $post->post_content;`

In questo modo otterrai il contenuto del post corrente senza dover specificare manualmente l'ID.

30 apr 2014 23:36:50
5

Puoi usare get_page() o get_post() per ottenere contenuti al di fuori del loop

//Per una pagina
$page_id = 1;
$get_page_object = get_page( $page_id );
$page_object = $get_page_object->post_content;
echo $newpagecString = substr($page_object, 0, 100);
//Per un articolo
$post_id = 2;
$get_post_object = get_post( $post_id );
$post_object = $get_post_object->post_content;
echo $newpostcString = substr($post_object, 0, 100);
30 apr 2014 23:05:46
Commenti

E perché c'è $get_page_object se non lo stiamo chiamando da nessuna parte?

Hardeep Asrani Hardeep Asrani
30 apr 2014 23:13:30

Ho aggiornato la mia risposta. Per favore controlla ora

Maidul Maidul
30 apr 2014 23:15:17

E $post_id = 2; è l'ID del post corrente? Possiamo chiamarlo con $post_id = $wp_query->post->ID; ?

Hardeep Asrani Hardeep Asrani
30 apr 2014 23:16:41

$post_id è l'id del post da cui vuoi recuperare i dati.$wp_query->post->ID; funzionerà nel loop.Ma penso che tu volessi ottenere il contenuto di una pagina o post al di fuori del loop.

Maidul Maidul
30 apr 2014 23:21:25

Sì, ma nel mio caso ancora non funziona. Vediamo cosa c'è che non va nel mio codice.

Hardeep Asrani Hardeep Asrani
30 apr 2014 23:22:33
0

Ho scoperto che questo funziona meglio: - utilizzando get_the_content()

Esempio:

$content = apply_filters( 'the_content', get_the_content() );
echo $content;
5 dic 2022 09:37:41