Как я могу отобразить определенный контент для каждой пользовательской таксономии?

#wordpress #custom-post-type #custom-taxonomy

#wordpress #пользовательский тип записи #обычай-таксономия #пользовательская таксономия

Вопрос:

У меня есть страница, где я хочу отобразить цены на ремонт различных смартфонов. Я создал пользовательский тип записи «Reparaturpreise» (цены на ремонт), а также пользовательскую таксономию «Marken» (бренды). Для каждой марки я хотел бы отобразить название бренда в качестве заголовка, а ниже должна быть таблица, в которой перечислены различные цены на ремонт.

Это код, который у меня есть до сих пор:

 <?php
               $args = array(
                           'taxonomy' => 'marke',
                           'orderby' => 'name',
                           'order'   => 'ASC'
                       );

               $cats = get_categories($args);

               foreach($cats as $cat) {
            ?>
            
            <h2><?php echo strip_tags(get_the_term_list( $post->ID, 'marke', '', ', ' ));?></h2>
                  
            <?php 
                    $args = array(
                        'post_type' => 'reparaturpreise',
                        'category'  => 'apple',
                        'posts_per_page' => 999
                    );
                    
                    $the_query = new WP_Query( $args ); 
                ?>
                
                    <table class="repair-prices-list">
                        <tr>
                            <th>Gerät</th>
                            <th>Display</th>
                            <th>Akku</th>
                            <th>Backcover</th>
                        </tr>

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

                        <tr>
                            <td><?php echo strip_tags(get_the_term_list( $post->ID, 'marke', '', ', ' ));?> <?php the_title(); ?></td>
                            <td><?php echo get_post_meta($post->ID, 'displayreparatur', true); ?>,-</td>
                            <td><?php echo get_post_meta($post->ID, 'akkutausch', true); ?>,-</td>
                            <td><?php echo get_post_meta($post->ID, 'backcover-reparatur', true); ?>,-</td>
                        </tr>


                                <?php
                                    wp_reset_postdata();
                                    endwhile;
                                    endif;
                                ?>

                    </table>
            <?php
               }
            ?>
  

Прямо сейчас он показывает 3 таблицы, но все с одинаковым заголовком (первый бренд), и в каждой таблице отображаются все телефоны, не отфильтрованные по бренду.

Вы можете увидеть текущий результат здесь:https://relaunch.websolute.at/reparaturpreise /

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

Ответ №1:

В настоящее время у вас есть: <h2><?php echo strip_tags(get_the_term_list( $post->ID, 'marke', '', ', ' ));?></h2>

Попробуй: <h2><?php echo strip_tags(get_the_term_list( $post->ID, $cat, '', ', ' ));?></h2>

Как вы пытаетесь заполучить разных кошек.

Также вы можете изменить posts_per_page на -1 для получения тех же «неограниченных» результатов.

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

1. К сожалению, когда я меняю ‘marke’ на $ cat, страница становится пустой.

2. Извините, я должен был упомянуть, что он не был протестирован. Это была просто мысль.

Ответ №2:

Мне удалось разобраться с этим самостоятельно, это код, который я использовал:

 <?php
            
            $custom_terms = get_terms('marke');

            foreach($custom_terms as $custom_term) {
                wp_reset_query();
                $args = array('post_type' => 'reparaturpreise',
                    'tax_query' => array(
                        array(
                            'taxonomy' => 'marke',
                            'field' => 'slug',
                            'terms' => $custom_term->slug,
                        ),
                    ),
                 );

                 $loop = new WP_Query($args);
                 if($loop->have_posts()) {
                    echo '<h2>'.$custom_term->name.'</h2>'; ?>

                    <table class="repair-prices-list">
                        <tr>
                            <th>Gerät</th>
                            <th>Display</th>
                            <th>Akku</th>
                            <th>Backcover</th>
                        </tr>
                                    
                    <?php
                    
                    while($loop->have_posts()) : $loop->the_post(); ?>
                        <tr>
                            <td><?php echo strip_tags(get_the_term_list( $post->ID, 'marke', '', ', ' ));?> <?php the_title(); ?></td>
                            <td><?php echo get_post_meta($post->ID, 'displayreparatur', true); ?>,-</td>
                            <td><?php echo get_post_meta($post->ID, 'akkutausch', true); ?>,-</td>
                            <td><?php echo get_post_meta($post->ID, 'backcover-reparatur', true); ?>,-</td>
                        </tr>
                        <?php
                    endwhile;
                     
                    ?>
                    
                    </table>
            
            <?php
                        
                 }
            }
            
            ?>