¿Cómo mostrar el contenido de la página en una plantilla de página?
En mi sitio WordPress, hice una plantilla de página personalizada que contenía una consulta personalizada [usando WP_Query()
]. Con esa consulta, puedo obtener perfectamente las entradas de una determinada categoría. Pero quiero mostrar los contenidos de la página junto con las entradas consultadas.
La cosa será así:
---------------------------
Encabezado de la Página
contenidos de la página
Encabezado del Post Consultado
contenidos del post consultado
---------------------------
- ¿Qué puedo hacer?

Estoy utilizando dos bucles. El primer bucle es para mostrar el contenido de la página, y el segundo bucle es para mostrar los contenidos de las publicaciones consultadas. He añadido comentarios en el código donde es necesario. Hice énfasis en los bucles, como Deckster0 mencionó en el soporte de WordPress, que the_content()
funciona solo dentro de un bucle de WordPress. Estoy colocando este código en mi propia plantilla:
<?php
/*
* Plantilla Nombre: Mi Plantilla
*/
get_header(); ?>
<div id="container">
<div id="content" class="pageContent">
<h1 class="entry-title"><?php the_title(); ?></h1> <!-- Título de la Página -->
<?php
// PARA MOSTRAR EL CONTENIDO DE LA PÁGINA
while ( have_posts() ) : the_post(); ?> <!-- Porque the_content() solo funciona dentro de un Bucle de WP -->
<div class="entry-content-page">
<?php the_content(); ?> <!-- Contenido de la Página -->
</div><!-- .entry-content-page -->
<?php
endwhile; // reiniciando el bucle de la página
wp_reset_query(); // reiniciando la consulta de la página
?>
<?php
// PARA MOSTRAR EL CONTENIDO DE LAS PUBLICACIONES
?>
<?php
$my_query = new WP_Query( 'cat=1' ); // Usé una categoría con ID 1 como ejemplo
?>
<?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> <!-- Título de la Publicación Consultada -->
<div class="entry-content">
<?php the_excerpt(); ?> <!-- Extractos de la Publicación Consultada -->
</div><!-- .entry-content -->
<?php endwhile; // reiniciando el bucle de la publicación ?>
</div><!-- #post-<?php the_ID(); ?> -->
<?php
wp_reset_postdata(); // reiniciando la consulta de la publicación
endif;
?>
</div><!-- #content -->
</div><!-- #container -->

Esa segunda consulta no debería estar dentro de if( have_posts() )
porque esa sentencia siempre será verdadera. Deberías llamar a if( $my_query->have_posts() )
después de las líneas $my_query = new WP_Query( 'cat=1' );
y args si quieres verificar que la consulta tiene resultados.

Usar dos bucles es común para hacer esto, pero un poco exagerado.
Cada entrada o página te proporciona la super-variable $post
. ¿Alguna vez te has preguntado por qué tu get_post_meta()
funciona con un simple $post->ID
;)?
Así que, antes de comenzar el WP_Query() que obtiene tus entradas listadas, puedes acceder a los datos de la página/entrada actual con $post->ID
, $post->post_content
, $post->guid
y así sucesivamente.
En el bucle, esta variable se llena con la entrada en bucle. Para guardarla para más tarde, puedes crear una nueva variable
$temp_post = $post
// nuevo WP_Query() + bucle aquí
o llamar
wp_reset_query()
después del listado. La última función debería llamarse de todos modos para asegurar que los datos en tu barra lateral sean los correctos para la página/entrada actual.
