Группируйте сообщения WordPress по категориям

#wordpress #advanced-custom-fields #taxonomy

#wordpress #расширенные пользовательские поля #таксономия

Вопрос:

после нескольких безуспешных поисков я задаю свой вопрос здесь. Действительно, я пытаюсь отобразить список сообщений, сгруппированных по категориям:

CAT A

  • post1
  • post2
  • post3

CAT B

  • post4
  • post5
  • post6
  • post7 …

Вот код, который я пробовал. Я могу отображать категории, но не сообщения

 <?php 
        $terms = get_terms( 'secteur', array(
            'orderby'    => 'count',
            'hide_empty' => 0
        ) );
        
        foreach( $terms as $term ) {
            $args = array(
                'post_type' => 'client',
                'posts_per_page' => '-1',
              'secteur' => $term->slug
            );
            $query = new WP_Query( $args );
  
            echo'<h3>' . $term->name . '</h3>';
           

                // Start the Loop
                while ( $query->have_posts() ) : $query->the_post(); 
                $secteur_dactivite = get_field( 'secteur_dactivite' );

                echo '<div class="cat-'.esc_html( $secteur_dactivite->slug ). '"><img src="'.get_field( 'logo' ).'"></div>';

                 endwhile;

            wp_reset_postdata();
 
        } 
    
    ?>
 

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

1. Я внедрил этот код для продукта WooCommerce, и, похоже, он работает нормально. Вы проверили, имеют ли get_field() они значения или нет? Попробуйте отобразить заголовок в цикле while с помощью get_the_title()

Ответ №1:

Вам нужно использовать tax_query в качестве атрибута запроса WP вместо secteur.

Попробуйте заменить это на:

 $args = array(
  'post_type' => 'client',
  'posts_per_page' => '-1',
  'tax_query' => array(
        array(
            'taxonomy' => 'secteur',
            'field'    => 'slug',
            'terms'    => $term -> slug,
        ),
    ),
);
 

Ответ №2:

большое вам спасибо за ваш ответ. К сожалению, это не меняет отображение. Отображаются заголовки, но не статьи.

 <h3>CAT1</h3
<h3>CAT2</h3>
<h3>CAT3</h3>
 

Если это поможет, я могу отобразить все элементы с помощью следующего кода :

 <?php
            $posts = get_posts(array(
                'numberposts' => -1,
                'post_type' => 'client',
                'post_status' => 'publish'
            ));
            if($posts)
            {
                echo '<div class="row all-item">';
                foreach($posts as $post)
                {
                    echo '<div"><a href="'. get_permalink($post->ID) .'"><img src="'.get_field( 'logo' ).'"></a></div>';
                }
                echo '</div>';
            }
        ?>
 

Ответ №3:

Большое вам спасибо за ваши ответы. Но у меня ничего не получилось, и я не могу придумать никаких решений. Я думаю, что проблема заключается в конфигурации моей таксономии.

Это моя пользовательская конфигурация типа сообщения (клиент): https://imgur.com/uDom3PH

моя конфигурация таксономии (secteur): https://imgur.com/WRwsSbR

мое пользовательское поле (secteur_dactivite): https://imgur.com/NKQ4GPn

Еще раз спасибо за вашу помощь