Пользовательские сообщения с несколькими терминами возвращаются только один раз - PullRequest
0 голосов
/ 27 сентября 2018

У меня есть пользовательский тип записи products с таксономией range.У меня есть другой пользовательский тип записи stockist, который использует ACF post_object, чтобы связать продукт с биржевиком.

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

<?php                           
$args2 = array( 'post_type' => 'stockist', 'posts_per_page' => -1 );
$stockistloop2 = new WP_Query( $args2 );
if ( $stockistloop2->have_posts() ): while ( $stockistloop2->have_posts() ): $stockistloop2->the_post();?>
<div class="col-1-1 clearfix nopad stockist-block-dropdown STORE <?php the_title();?>">
    <h2 class="stockist-title"><?php the_title();?></h2>
<?php 
$args = array( 'taxonomy' => 'range');
$categories = get_categories($args);
 if($categories): foreach($categories as $category): $url = get_category_link( $category->term_id ); ?>
    <div class="col-1-5 mobile-col-1-2">
        <h4><?php echo ($category->name) ;?></h4>
        <?php $post_objects = get_field('stocked_range'); if( $post_objects ): ?>
        <ul class="stockist-block-products clearfix">
        <?php foreach( $post_objects as $post_object): $post_terms_array = get_the_terms($post_object, 'range'); $post_term_name = $post_terms_array[0]->slug; 
            if($post_term_name == $category->slug):?>
            <li>
                <a href="<?php echo get_permalink($post_object->ID); ?>" target="_blank"><?php echo get_the_title($post_object->ID); ?></a>
            </li>
            <?php endif; endforeach; ?>
        </ul>
    <?php  endif;?>
    </div>
    <?php endforeach; endif;?>
</div>
<?php endwhile; wp_reset_postdata(); endif; ?>

Это работает до некоторой точки, но когда продукт имеет более одного термина.Например, свиная колбаса может иметь термин «колбасы», а также «барбекю», она возвращается только один раз под сосисками, а не в обоих условиях.

Кто-нибудь может дать какой-нибудь совет?

1 Ответ

0 голосов
/ 27 сентября 2018

Ваша проблема заключается в следующих строках:

$post_term_name = $post_terms_array[0]->slug;
if($post_term_name == $category->slug):

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

<?php                           
$args2 = array( 
    'post_type'      => 'stockist', 
    'posts_per_page' => -1 
);
$stockistloop2 = new WP_Query( $args2 );
if ( $stockistloop2->have_posts() ): while ( $stockistloop2->have_posts() ): $stockistloop2->the_post();
?>
<div class="col-1-1 clearfix nopad stockist-block-dropdown STORE <?php the_title();?>">
    <h2 class="stockist-title"><?php the_title();?></h2>
    <?php 
    $args = array( 
        'taxonomy' => 'range'
    );
    $categories = get_categories($args);
    if($categories): 
    foreach($categories as $category): 
    $url = get_category_link( $category->term_id ); 
    ?>
    <div class="col-1-5 mobile-col-1-2">
        <h4><?php echo ($category->name); ?></h4>
        <?php 
        $post_objects = get_field('stocked_range'); 
        if( $post_objects ): 
        ?>
        <ul class="stockist-block-products clearfix">
            <?php 
            foreach( $post_objects as $post_object ): 
            $post_terms_array = get_the_terms($post_object, 'range'); 
            $post_terms_id_array = wp_list_pluck( $post_terms_array, 'term_id' );
            if( in_array( $category->term_id, $post_terms_id_array ) ):
            ?>
            <li>
                <a href="<?php echo get_permalink($post_object->ID); ?>" target="_blank"><?php echo get_the_title($post_object->ID); ?></a>
            </li>
            <?php 
            endif;
            endforeach; 
            ?>
        </ul>
        <?php endif;?>
    </div>
    <?php 
    endforeach; 
    endif;
    ?>
</div>
<?php 
endwhile; 
wp_reset_postdata(); 
endif; 
?>

Я создаю массив просто идентификаторов терминов, а затем проверяю, находится ли текущий массив $category в этом массиве.

...