De ce nu funcționează the_content() în această pagină {single-custom_post_type.php}?

19 sept. 2011, 18:52:27
Vizualizări: 22.2K
Voturi: 8

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?

2
Comentarii

Blocul tău de informații publicație este în interiorul buclei?

Brian Fegter Brian Fegter
19 sept. 2011 19:01:48

Presupun că da, deoarece $post este populat și get_the_title() funcționează

djb djb
19 sept. 2011 19:11:33
Toate răspunsurile la întrebare 2
7

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;
19 sept. 2011 19:14:49
Comentarii

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

djb djb
19 sept. 2011 19:19:39

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().

Brian Fegter Brian Fegter
19 sept. 2011 19:30:01

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.

Sisir Sisir
19 sept. 2011 19:32:46

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.

djb djb
19 sept. 2011 19:39:56

@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?

Raptor Raptor
17 sept. 2013 07:35:10

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

Brian Fegter Brian Fegter
17 sept. 2013 16:03:21

Ș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?

Robin Andrews Robin Andrews
29 oct. 2016 17:38:48
Arată celelalte 2 comentarii
0

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();
?>

Vezi Accesarea tuturor datelor postării

5 ian. 2015 04:38:45