WP_Query для пользовательского типа записи не отображается, множественные циклы и get_template_part

28 авг. 2014 г., 14:16:39
Просмотры: 17K
Голосов: 0

У меня возникли проблемы с отображением отзывов. В page.php у меня есть раздел с отзывами. У меня есть цикл, который получает контент для page.php, а затем get_template_part('content', 'testimonials') для получения цикла отзывов.

<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>Записей не найдено :( </p>

    <?php endif; ?>

</div>

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

Мой основной цикл выглядит как выше ^^. А цикл отзывов выглядит так в content-testimonials.php:

<?php 

    $args = array(
        'post_type' => 'testimonials', // Тип записи - отзывы
        'posts_per_page' => 1, // Количество отзывов на странице
        'orderby' => 'rand' // Сортировка в случайном порядке
    );

    $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>Отзывов не найдено :( </p>

<?php endif; ?>

Я еще новичок в WordPress и не могу понять, что я упускаю. Я проверил админку, убедился, что отзывы есть, настроил пользовательские поля для отображения, если тип записи равен testimonial, но не понимаю, почему они не загружаются.

Буду благодарен за ваши ответы, спасибо заранее!

0
Все ответы на вопрос 1
6

Кажется, вы забыли проверить, есть ли посты в $the_query.

<?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>Нет доступных отзывов :( </p>

<?php endif;
wp_reset_postdata(); // Сбрасываем данные поста
?>

И также не забудьте сбросить postdata, если на странице выполняется несколько запросов.

28 авг. 2014 г. 14:20:36
Комментарии

Прекрасно! Спасибо, дружище! Такая досадная ошибка, упустил самую простую вещь. Сработало как по волшебству!

Jake Gabb Jake Gabb
28 авг. 2014 г. 14:22:49

Убедитесь, что вы также сбрасываете postdata после каждого запроса, если выполняете несколько запросов на странице, используя wp_reset_postdata();. Я обновил свой ответ с учетом этого.

Robert hue Robert hue
28 авг. 2014 г. 14:24:07

@JakeGabb не забудьте принять этот ответ :-). Для информации ознакомьтесь со страницей [tour]

Pieter Goosen Pieter Goosen
28 авг. 2014 г. 14:24:46

Я не забыл ;), но там сказали, что нужно подождать 9 минут :'(

Jake Gabb Jake Gabb
28 авг. 2014 г. 14:25:56

@JakeGabb О да, ограничения для новых пользователей, забыл об этом, извини. Кстати, добро пожаловать на WPSE.

Pieter Goosen Pieter Goosen
28 авг. 2014 г. 14:48:10

Добро пожаловать на WPSE, @JakeGabb ;)

Robert hue Robert hue
28 авг. 2014 г. 14:59:17
Показать остальные 1 комментариев