Перебор терминов пользовательской таксономии и отображение всех записей для каждого термина

5 окт. 2015 г., 20:56:16
Просмотры: 24.3K
Голосов: 2

Я использую следующий код, чтобы попытаться перебрать все термины в моей пользовательской таксономии category-film, а затем вывести название термина как заголовок вместе со всеми пользовательскими записями, которые принадлежат этому термину

<?php $terms = get_terms( 'category-film' ); ?>

<?php foreach( $terms as $term ) : ?>

    <?php $posts = new WP_Query( 'post=film&category-film= ' . $term->slug . '&posts_per_page=-1' ); ?>

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

        <h3><?php echo $term->name; ?></h3>
        <p><?php the_title(); ?></p>

        <div class="col-md-6">
            <?php the_field('url'); ?>
        </div>  

    <?php endwhile; endif; ?>

<?php endforeach; ?>

Однако я обнаружил, что мой код вообще ничего не выводит.

Если я перемещаю <h3><?php echo $term->name; ?></h3> так, чтобы он находился вне цикла (но внутри цикла foreach), он нормально выводит названия терминов.

Так что я полагаю, проблема должна быть связана с самим циклом?

6
Комментарии

Не используйте $posts как пользовательскую переменную, это ломает и портит глобальную переменную $posts, лучше используйте что-то вроде $posts_array

Pieter Goosen Pieter Goosen
5 окт. 2015 г. 20:58:31

Также, просто заметка, ваш запрос очень ресурсоёмкий :-)

Pieter Goosen Pieter Goosen
5 окт. 2015 г. 20:59:00

спасибо @PieterGoosen, я пробовал это, но, к сожалению, проблема остаётся. У меня не получается вывести что-либо в цикле, даже просто статичный контент

User User
5 окт. 2015 г. 21:03:30

Вы можете попробовать что-то вроде этого, просто учтите, что это было сделано для основного запроса, поэтому вам нужно будет немного адаптировать его для пользовательского запроса

Pieter Goosen Pieter Goosen
5 окт. 2015 г. 21:03:41

@PieterGoosen ах, что вы имеете в виду под "дорогим"? Ха... это немного неэффективно?

User User
5 окт. 2015 г. 21:03:59

Используйте правильный tax_query

Pieter Goosen Pieter Goosen
5 окт. 2015 г. 21:04:55
Показать остальные 1 комментариев
Все ответы на вопрос 1
0
10

Если всё настроено правильно, этот код выведет 10 записей из пользовательского типа записи film, где таксономия category-film будет содержать каждый из терминов этой таксономии. Я не знаю о вашем шаблонизаторе, так что разместите вёрстку соответственно.

<?php
// Получаем все термины таксономии 'category-film'
$_terms = get_terms( array('category-film') );

// Перебираем каждый термин
foreach ($_terms as $term) :

    $term_slug = $term->slug;
    // Создаём запрос для получения постов типа 'film' с текущим термином
    $_posts = new WP_Query( array(
                'post_type'         => 'film',
                'posts_per_page'    => 10, // важно для избежания предупреждения о лимите памяти PHP
                'tax_query' => array(
                    array(
                        'taxonomy' => 'category-film',
                        'field'    => 'slug',
                        'terms'    => $term_slug,
                    ),
                ),
            ));

    // Если есть посты для текущего термина
    if( $_posts->have_posts() ) :

        // Выводим название термина
        echo '<h3>'. $term->name .'</h3>';
        echo '<div class="row">';
        while ( $_posts->have_posts() ) : $_posts->the_post();
        ?>
            <div class="col-sm-6">
                <h4><?php the_title(); ?></h4>
                <p><?php echo get_post_meta( get_the_ID(), 'url', true ); ?></p>
            </div>
        <?php
        endwhile;

        echo '</div>';

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

endforeach;
?>
5 окт. 2015 г. 21:15:30