WP_Query no muestra posts en tipo de entrada personalizado, múltiples bucles y get_template_part

28 ago 2014, 14:16:39
Vistas: 17K
Votos: 0

Estoy teniendo problemas para mostrar mis testimonios. En page.php tengo una sección de testimonios. Tengo un bucle que obtiene el contenido para page.php, y luego un get_template_part('content', 'testimonials') para obtener el bucle de testimonios.

<div class="grid_12 omega clearfix">

    <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>

        <h1><?php the_title(); ?></h1>
        <p><?php the_content(); ?></p>
        <hr>

    <?php endwhile; else : ?>

        <p>No hay publicaciones :( </p>

    <?php endif; ?>

</div>

<?php get_template_part( 'content', 'testimonials' ); ?>

Mi bucle principal es el de arriba ^^. Mi bucle de testimonios está en content-testimonials.php y luce así:

<?php 

    $args = array(
        'post_type' => 'testimonials', // Tipo de entrada personalizada
        'posts_per_page' => 1, // Mostrar solo 1 testimonio
        'orderby' => 'rand' // Orden aleatorio
    );

    $the_query = new WP_Query( $args );

?>

<?php if ( have_posts() ) : while ( $the_query->have_posts() ) : $the_query->the_post(); ?>

    <div class="testimonial push_2 grid_10 clearfix">
        <blockquote>&ldquo;<?php the_field( 'testimonial' ); ?>&rdquo;</blockquote>
        <cite>&mdash;<?php the_field( 'name' ); ?></cite>
    </div>

<?php endwhile; else : ?>

    <p>No hay testimonios disponibles :( </p>

<?php endif; ?>

Soy bastante nuevo en WordPress y no logro ver qué me falta. He revisado el área de administración para asegurarme de que hay testimonios, edité el campo personalizado para que se muestre si el tipo de entrada es testimonial, pero no entiendo por qué no carga.

¡Espero sus respuestas, gracias de antemano!

0
Todas las respuestas a la pregunta 1
6

Creo que olvidaste verificar si $the_query tiene posts.

<?php

    $args = array(
        'post_type' => 'testimonials',
        'posts_per_page' => 1,
        'orderby' => 'rand'
    );

    $the_query = new WP_Query( $args );

?>

<?php if ( $the_query->have_posts() ) : while ( $the_query->have_posts() ) : $the_query->the_post(); ?>

    <div class="testimonial push_2 grid_10 clearfix">
        <blockquote>&ldquo;<?php the_field( 'testimonial' ); ?>&rdquo;</blockquote>
        <cite>&mdash;<?php the_field( 'name' ); ?></cite>
    </div>

<?php endwhile; else : ?>

    <p>No hay testimonios :( </p>

<?php endif;
wp_reset_postdata(); ?>

Y tampoco olvides resetear los datos del post (postdata) si estás ejecutando múltiples consultas en una página.

28 ago 2014 14:20:36
Comentarios

¡Hermoso! ¡Gracias, amigo! Qué dolor, me perdí lo más simple. ¡Funcionó de maravilla!

Jake Gabb Jake Gabb
28 ago 2014 14:22:49

Asegúrate de restablecer los datos de la publicación en cada consulta, si estás ejecutando múltiples consultas en una página. Con wp_reset_postdata(); Actualicé mi respuesta con esto.

Robert hue Robert hue
28 ago 2014 14:24:07

@JakeGabb no olvides aceptar esta respuesta :-). Para más información, revisa la página del [tour]

Pieter Goosen Pieter Goosen
28 ago 2014 14:24:46

No lo olvidé ;), pero decía que tenía que esperar 9 minutos :'(

Jake Gabb Jake Gabb
28 ago 2014 14:25:56

@JakeGabb ah sí, las restricciones para nuevos usuarios, lo olvidé, lo siento. Por cierto, bienvenido a WPSE.

Pieter Goosen Pieter Goosen
28 ago 2014 14:48:10

Bienvenido a WPSE @JakeGabb ;)

Robert hue Robert hue
28 ago 2014 14:59:17
Mostrar los 1 comentarios restantes