• Добрый день! пытаюсь вывести записи термов таксономии. Т.е. название термина и под ним записи , которые есть у него :

    <?php 
    $all_terms = get_terms(array('taxonomy' => 'nosology', 'hide_empty' => 1, 'parent' => '0' ) );
    
    foreach (  $all_terms as $term ) { //внешний цикл
        echo "<h3>$term->name</h3>";
        echo "<div>";
        $query = new WP_Query( array(
            'post_status' => 'publish',
            'post_type' => 'doctors',
            'posts_per_page' => -1,
            'tax_query' => array(
                array(
                    'taxonomy' => 'nosology',
                    'field'    => 'slug',
                    'terms'    => $term->slug,
                )
            )
        ));
        
        while ( $query->have_posts() ) { # внутренний цикл
            $query->the_post();
            ?>
            <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
            <?php  
        } //конец внутреннего
        echo "</div>";
    } //конец наружного
    
    ?>

    но почему-то первый пункт выводится пустой, хотя записи «doctors» к нему не привязаны. Другие типы записей есть, а именно doctors нету.. может что-то не так с кодом?

Просмотр 9 ответов — с 1 по 9 (всего 9)
  • Модератор Юрій

    (@yube)

    И что не так? Чего ожидаете в выводе?

    • Ответ изменён 5 лет, 9 месяцев назад пользователем Юрій.

    дело в том что выводится пункт терма в котором нет этих записей, и он, соответственно пустой, а в аргументах есть ‘hide_empty’ => 1..
    вот страница https://test-sait.pp.ua/doctors/

    Модератор Юрій

    (@yube)

    выводится пункт терма в котором нет этих записей,

    Однако же Вы пишете

    Другие типы записей есть

    Значит — не пустой.

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

    в выборке указано же ‘post_type’ => ‘doctors’

    • Ответ изменён 5 лет, 9 месяцев назад пользователем face2005.
    • Ответ изменён 5 лет, 9 месяцев назад пользователем face2005.
    Модератор Юрій

    (@yube)

    в выборке указано же ‘post_type’ => ‘doctors’

    А откуда get_terms() знать, что Вы потом будете запрашивать?

    а как поступить тогда?

    Модератор Юрій

    (@yube)

    Меняйте логику вывода. После new WP_Query делайте проверку $query->have_posts() и уже внутри echo "<h3>$term->name</h3>"; и прочее от «обертки». Тогда условно-пустых термов не будет.

    Модератор Юрій

    (@yube)

    или так

    
    <?php 
    $all_terms = get_terms(array('taxonomy' => 'nosology', 'hide_empty' => 1, 'parent' => '0' ) );
    
    foreach (  $all_terms as $term ) { //внешний цикл
        $query = new WP_Query( array(
            'post_status' => 'publish',
            'post_type' => 'doctors',
            'posts_per_page' => -1,
            'tax_query' => array(
                array(
                    'taxonomy' => 'nosology',
                    'field'    => 'slug',
                    'terms'    => $term->slug,
                )
            )
        ));
        if ( ! $query->have_posts() ) continue;
        echo "<h3>$term->name</h3>";
        echo "<div>";
        while ( $query->have_posts() ) { # внутренний цикл
            $query->the_post();
            ?>
            <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
            <?php  
        } //конец внутреннего
        echo "</div>";
    } //конец наружного
    
    ?>
    

    круто! спасибо большое!

Просмотр 9 ответов — с 1 по 9 (всего 9)
  • Тема «Вывод записей таксономии» закрыта для новых ответов.