Come visualizzare il contenuto della pagina in un template di pagina?
Nel mio sito WordPress, ho creato un template di pagina personalizzato che contiene una query personalizzata [usando WP_Query()
]. Con quella query, riesco a ottenere perfettamente i post di una determinata categoria. Ma voglio mostrare i contenuti della pagina insieme ai post interrogati.
La cosa sarà così:
---------------------------
Intestazione Pagina
contenuti della pagina
Intestazione Post Interrogato
contenuti del post interrogato
---------------------------
- Cosa posso fare?

Sto utilizzando due loop. Il primo loop serve a mostrare il contenuto della pagina, mentre il secondo loop mostra i contenuti dei post richiesti dalla query. Ho inserito dei commenti nel codice dove necessario. Come ha sottolineato Deckster0 nel supporto WordPress, the_content()
funziona solo all'interno di un Loop di WordPress. Sto inserendo questo codice in un mio template personalizzato:
<?php
/*
* Template Name: Mio Template
*/
get_header(); ?>
<div id="container">
<div id="content" class="pageContent">
<h1 class="entry-title"><?php the_title(); ?></h1> <!-- Titolo della Pagina -->
<?php
// PER MOSTRARE IL CONTENUTO DELLA PAGINA
while ( have_posts() ) : the_post(); ?> <!-- Perché the_content() funziona solo dentro un Loop WP -->
<div class="entry-content-page">
<?php the_content(); ?> <!-- Contenuto della Pagina -->
</div><!-- .entry-content-page -->
<?php
endwhile; // reset del loop della pagina
wp_reset_query(); // reset della query della pagina
?>
<?php
// PER MOSTRARE IL CONTENUTO DEI POST
?>
<?php
$my_query = new WP_Query( 'cat=1' ); // Ho usato la categoria con ID 1 come esempio
?>
<?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> <!-- Titolo del Post Richiesto -->
<div class="entry-content">
<?php the_excerpt(); ?> <!-- Estratto del Post Richiesto -->
</div><!-- .entry-content -->
<?php endwhile; // reset del loop del post ?>
</div><!-- #post-<?php the_ID(); ?> -->
<?php
wp_reset_postdata(); // reset della query del post
endif;
?>
</div><!-- #content -->
</div><!-- #container -->

La seconda query non dovrebbe essere all'interno di if( have_posts() )
perché quella condizione sarà sempre vera. Dovresti chiamare if( $my_query->have_posts() )
dopo le righe $my_query = new WP_Query( 'cat=1' );
e args se vuoi verificare che la query abbia risultati.

Utilizzare due loop è una pratica comune per ottenere questo risultato, ma risulta un po' eccessiva.
Ogni articolo o pagina ti fornisce la super-variabile $post
. Ti sei mai chiesto perché la tua funzione get_post_meta()
funziona semplicemente con $post->ID
;) ?
Quindi, prima di iniziare il WP_Query() che recupera i tuoi articoli elencati, puoi accedere ai dati della pagina/articolo corrente con $post->ID
, $post->post_content
, $post->guid
e così via.
Nel loop, questa variabile viene riempita con i dati dell'articolo corrente. Per salvarla per un uso successivo, puoi creare una nuova variabile
$temp_post = $post;
// nuovo WP_Query() + loop qui
oppure chiamare
wp_reset_query()
dopo l'elenco. Quest'ultima funzione dovrebbe essere chiamata comunque per assicurarsi che i dati nella tua sidebar siano corretti per la pagina/articolo corrente.
