¿Cómo mostrar el contenido de la página en una plantilla de página?

11 mar 2013, 20:16:23
Vistas: 181K
Votos: 14

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?
4
Comentarios

¿Cuál es el problema? Esta es una plantilla de página, por lo que tienes acceso al contenido de la página. Mediante otra consulta separada, puedes acceder a una publicación específica, por ejemplo, y así mostrar su contenido. ¿Entonces?

tfrommen tfrommen
11 mar 2013 20:25:58

Por favor, ten paciencia antes de votar negativamente. Estuve luchando con esto y luego encontré la solución. Intenté hacer una pregunta y respuesta aquí para compartir la lógica con otros; creo que aclarará el hecho de la manera en que lo estaba buscando. Espero que la pregunta y respuesta sean claras para ti.

Mayeenul Islam Mayeenul Islam
11 mar 2013 20:41:22

En primer lugar, no voté negativamente tu pregunta. En segundo lugar, gracias por compartir tu conocimiento con nosotros. Tienes toda la razón al hacerlo. Supongo que el problema es/fue que esta pregunta no era tan difícil de resolver para usuarios/desarrolladores experimentados de WP, así como el hecho de que publicaste la pregunta sola. Si quieres hacer una pregunta y respuesta desde el principio, simplemente incluye tu respuesta/solución directamente en la misma página donde escribes tu pregunta. Debajo del botón Publicar tu pregunta hay una casilla de verificación Responder tu propia pregunta. Gracias de nuevo.

tfrommen tfrommen
11 mar 2013 21:10:00

wp_reset_postdata() al rescate. Debe hacerse después de cada consulta personalizada.

kaiser kaiser
11 mar 2013 22:06:47
Todas las respuestas a la pregunta 2
2
27

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 -->
11 mar 2013 20:39:12
Comentarios

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.

t31os t31os
12 abr 2013 11:31:11

@t31os tienes razón. Es mi error. Ahora he corregido el código así. Gracias por la identificación. :)

Mayeenul Islam Mayeenul Islam
28 may 2014 16:28:30
0

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.

11 mar 2013 23:34:43