Cum să afișezi conținutul paginii într-un șablon de pagină?
În site-ul meu WordPress, am creat un șablon personalizat de pagină, care conține o interogare personalizată [folosind WP_Query()
]. Cu această interogare, pot obține perfect postările dintr-o anumită categorie. Dar vreau să afișez și conținutul paginii împreună cu postările interogate.
Structura va arăta astfel:
---------------------------
Titlul Paginii
conținutul paginii
Titlul Postării Interogate
conținutul postării interogate
---------------------------
- Ce pot face?

Folosesc două bucle. Prima buclă este pentru a afișa conținutul paginii, iar a doua buclă este pentru a afișa conținutul postărilor interogate. Am adăugat comentarii în cod acolo unde a fost necesar. Am subliniat în bucle, așa cum a menționat Deckster0 în suportul WordPress, că the_content()
funcționează doar în interiorul unei bucle WordPress. Plasez acest cod într-un șablon personalizat:
<?php
/*
* Șablon nume: Șablonul meu
*/
get_header(); ?>
<div id="container">
<div id="content" class="pageContent">
<h1 class="entry-title"><?php the_title(); ?></h1> <!-- Titlul paginii -->
<?php
// PENTRU AFIȘAREA CONȚINUTULUI PAGINII
while ( have_posts() ) : the_post(); ?> <!-- Deoarece the_content() funcționează doar în interiorul unei bucle WP -->
<div class="entry-content-page">
<?php the_content(); ?> <!-- Conținutul paginii -->
</div><!-- .entry-content-page -->
<?php
endwhile; // resetarea buclei paginii
wp_reset_query(); // resetarea interogării paginii
?>
<?php
// PENTRU AFIȘAREA CONȚINUTULUI POSTĂRILOR
?>
<?php
$my_query = new WP_Query( 'cat=1' ); // Am folosit ID-ul categoriei 1 ca exemplu
?>
<?php if ( $my_query->have_posts() ) : ?>
<div id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
<?php while ($my_query->have_posts()) : $my_query->the_post(); ?>
<h1 class="entry-title"><?php the_title(); ?></h1> <!-- Titlul postării interogate -->
<div class="entry-content">
<?php the_excerpt(); ?> <!-- Rezumatul postării interogate -->
</div><!-- .entry-content -->
<?php endwhile; // resetarea buclei postării ?>
</div><!-- #post-<?php the_ID(); ?> -->
<?php
wp_reset_postdata(); // resetarea interogării postării
endif;
?>
</div><!-- #content -->
</div><!-- #container -->

Al doilea interogare nu ar trebui să fie în interiorul if( have_posts() )
deoarece acea afirmație va fi întotdeauna adevărată. Ar trebui să apelezi if( $my_query->have_posts() )
după liniile $my_query = new WP_Query( 'cat=1' );
și args dacă dorești să verifici dacă interogarea are rezultate.

Utilizarea a două bucle este o practică comună pentru a realiza acest lucru, dar este un pic exagerată.
Fiecare articol sau pagină vă oferă super-variabila $post
. V-ați întrebat vreodată de ce funcția get_post_meta()
funcționează cu un simplu $post->ID
;) ?
Deci, înainte de a începe WP_Query() care obține articolele listate, puteți accesa datele paginii/articolului curent cu $post->ID
, $post->post_content
, $post->guid
și așa mai departe.
În buclă, această variabilă este umplută cu articolul buclă. Pentru a o salva pentru mai târziu, puteți fie să creați o nouă variabilă
$temp_post = $post
// new WP_Query() + bucla aici
sau să apelați
wp_reset_query()
după listare. Ultima funcție ar trebui să fie apelată oricum pentru a vă asigura că datele din bara laterală sunt cele corecte pentru pagina/articolul curent.
