Utilizarea funcției the_content în afara loop-ului

30 apr. 2014, 23:00:20
Vizualizări: 14.5K
Voturi: 2

Încercam să obțin primele 100 de cuvinte din conținut în header și folosesc următorul fragment de cod pentru a obține primele 100 de cuvinte în loop, dar este posibil să obții valoarea în afara loop-ului:

$cstring = get_the_content( '' );
$newcString = substr( $cstring, 0, 100 );
echo'<p>' . $newcString . '</p>';
0
Toate răspunsurile la întrebare 4
4

Am scris un articol pe acest link, dar iată un rezumat al punctelor principale:

  • the_content poate fi folosit doar 'în interiorul buclei'
  • 'în interiorul buclei' poate fi corect 'simulat' doar prin apelarea funcțiilor setup_postdata() și global $post.
  • Apoi, trebuie să faci curățenie după tine prin apelarea funcției wp_reset_postdata()

Codul de mai jos oferă o funcție pentru a prelua conținutul unui post pe baza ID-ului postului. Acesta diferă de răspunsul lui @NickYoung prin faptul că conținutul pe care îl primești nu este cel stocat în coloana post_content a tabelului de postări, ci acel conținut după ce a trecut prin filtrul the_content (de exemplu, shortcode-urile parsate etc.).

Codul

/**
 * Afișează conținutul postului. Opțional, poate primi ID-ul postului
 * @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 Opțional. ID-ul postului.
 * @param string $more_link_text Opțional. Conținut pentru când există mai mult text.
 * @param bool $stripteaser Opțional. Elimină conținutul teaser înainte de textul suplimentar. Valoarea implicită este 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 mai 2014 13:28:22
Comentarii

Acesta este un punct foarte bun că nu este filtrat. În acest caz, ai putea folosi $post->post_content_filtered, cred, nu? Nu am folosit niciodată această variantă înainte, dar sună ca și cum ar funcționa.

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

Foarte bine. $post->post_content nu trece prin filtre

bysanchy bysanchy
26 oct. 2016 07:38:49

Acesta ar trebui să fie răspunsul acceptat.

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

wp_reset_postdata( ) nu acceptă niciun parametru. Poate că a acceptat în trecut, nu știu.

Felipe Alameda A Felipe Alameda A
24 iul. 2019 04:34:34
0

Dacă încerci să faci asta pentru pagina curentă pe care te afli, poți folosi acest cod:

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

Aceasta va prelua conținutul pentru postarea curentă în loc să fie nevoie să setezi ID-ul în mod specific.

30 apr. 2014 23:36:50
5

Puteți folosi get_page() sau get_post() pentru a obține conținut în afara buclei

//Pentru pagină
$page_id = 1;
$get_page_object = get_page( $page_id );
$page_object = $get_page_object->post_content;
echo $newpagecString = substr($page_object, 0, 100);
//Pentru articol
$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
Comentarii

Și de ce există $get_page_object când nu îl apelăm nicăieri?

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

Am actualizat răspunsul meu. Te rog verifică acum.

Maidul Maidul
30 apr. 2014 23:15:17

Și $post_id = 2; este ID-ul postării curente? Putem să-l obținem cu $post_id = $wp_query->post->ID; ?

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

$post_id este ID-ul postării din care doriți să preluați date. $wp_query->post->ID; va funcționa în buclă. Dar cred că doreai să obții conținutul unei pagini sau postări din afara buclei.

Maidul Maidul
30 apr. 2014 23:21:25

Da, dar în cazul meu încă nu funcționează. Lasă-mă să văd ce este în neregulă cu codul meu.

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

Am observat că acest lucru funcționează mai bine: - folosind get_the_content()

Exemplu:

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