De ce nu funcționează the_content() în această pagină {single-custom_post_type.php}?
Acest cod este din pagina mea single-publication.php
.
Acesta afișează câmpurile personalizate relevante etc (aici înfășurate în tag-uri template), dar the_content()
nu va afișa conținutul postării. Am recurs la utilizarea $post->post_content
(care funcționează), dar misterul rămâne:
<div class="publication-info">
<?php printf("<h2>%s</h2>", get_the_title() ); ?>
<div class="publication-meta publication-credit"><?php the_publication_credit(); ?></div>
<div class="publication-meta publication-date"><?php the_publication_date(); ?></div><br />
<div class="publication-blurb" style="font-family:sans-serif;"><?php echo $post->post_content; // the_content() nu funcționează. De ce? ?></div>
</div>
Ce se întâmplă aici?
EDITARE: Am fost determinat să pun această întrebare deoarece am crezut - greșit, după cum s-a dovedit - că funcționarea $post
și returnarea unui titlu de către get_the_title()
erau un semn sigur că sunt în interiorul buclei. Dar se pare că nu este cazul. cf Codex despre The Loop (al doilea paragraf) și Codex despre get_the_title() (lista de parametri). Poate cineva să explice?
Există o mare probabilitate ca HTML-ul tău să nu fie inclus în buclă. Asigură-te că codul tău arată astfel:
if(have_posts()): while(have_posts()): the_post(); ?>
<div class="publication-info">
<?php printf("<h2>%s</h2>", get_the_title() ); ?>
<div class="publication-meta publication-credit"><?php the_publication_credit(); ?></div>
<div class="publication-meta publication-date"><?php the_publication_date(); ?></div><br />
<div class="publication-blurb" style="font-family:sans-serif;"><?php echo $post->post_content; // the_content() nu funcționează. De ce? ?></div>
</div>
<?php endwhile; endif;

da, asta funcționează. mulțumesc. dar cum aș putea folosi get_the_title() în afara loop-ului? codex-ul spune $ID
(int) (optional) ID-ul postării sau lăsați gol pentru a folosi postarea curentă din The Loop

Pentru că folosește obiectul $post care este setat pentru pagină. E un pic ciudat, sigur. funcția the_content() depinde de funcția the_post().

Da, trebuie să plasați funcția the_content()
în interiorul loop-ului. Modul în care văd eu, the_content()
ar trebui setat într-un fișier single.php
sau post-type.php
. Dar din nu știu ce motiv, nu este. Tot trebuie să aveți un loop în fișierul single.php
sau post-type.php
.

mulțumesc mult. o ultimă cerere: poți să-mi indicați orice resursă care explică puțin mai mult despre când și cum este setat $post, dacă nu este setat la începutul loop-ului? aș vrea să înțeleg.

@BrianFegter corectează-mă dacă greșesc: în single-{post_type}.php
, există întotdeauna 1 post. Prin urmare, while(have_posts()){}
poate fi omis. Nu-i așa?

@ShivanRaptor Cele mai bune practici recomandă să includem întotdeauna loop-ul

Și eu sunt confuz în legătură cu asta. Poate cineva să explice mai clar de ce titlul este disponibil în afara buclei, dar conținutul nu? @Brian, spui că asta se întâmplă pentru că folosește obiectul post setat pentru pagină, dar nu conține și acesta datele de conținut? Ce îmi scapă, te rog?

Unele date legate de postări nu sunt disponibile implicit prin get_posts, cum ar fi conținutul postării prin the_content()
, sau ID-ul numeric. Această problemă este rezolvată prin apelarea funcției interne setup_postdata()
, cu array-ul $post ca argument:
<?php
$args = array( 'posts_per_page' => 3 );
$lastposts = get_posts( $args );
foreach ( $lastposts as $post ) :
setup_postdata( $post ); ?>
<h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
<?php the_content(); ?>
<?php endforeach;
wp_reset_postdata();
?>
