代码之家  ›  专栏  ›  技术社区  ›  Daniel Vickers

分类法上的foreach显示重复项

  •  0
  • Daniel Vickers  · 技术社区  · 7 年前

    <?php if ( $terms && !is_wp_error( $terms ) ) {
        foreach ( $terms as $term ) {
    
            $args = array(
                'post_type'  => 'products',
                'posts_per_page' => -1,
                'orderby' => 'menu_order',
                'tax_query' => array(
                    array(
                        'taxonomy' => 'product_cat',
                        'field'    => 'slug',
                        'terms'    => $term->slug,
                    ),
                ),
                'order' => 'asc',
            );
    
            runQuery($args);
        }
    } ?>
    

    以下是runQuery函数:

    <?php $x = 0;
    function runQuery($args) {
        global $x;
        $query = new WP_Query( $args );
    
        if ($query->have_posts()) : while ($query->have_posts()) : $query->the_post();
            $cat_terms = get_the_terms($post->id, 'product_cat');
            $datagroups = '';
    
            foreach ($cat_terms as $key => $cat) {
                if (count($cat_terms) == ($key + 1)) {
                    $datagroups .= '"' . $cat->name . '"';
                } else {
                    $datagroups .= '"' . $cat->name . '", ';
                }
            }
        ?>      
    
        HTML Here that is displayed;
    
        <?php $x ++;
        endwhile;
        endif;
        wp_reset_postdata();
    }?>
    
    1 回复  |  直到 7 年前
        1
  •  0
  •   Daniel Vickers    7 年前

    我已经弄明白了这一点,我基本上只需要检查循环中的当前帖子,看看它是否已经显示:

    <?php $x = 0;
    $displayed = [];
    
    function runQuery($args) {
        global $displayed;
        global $x;
        $query = new WP_Query( $args );
    
        if ($query->have_posts()) : while ($query->have_posts()) : $query->the_post();
            $cat_terms = get_the_terms($post->id, 'product_cat');
            $datagroups = '';
    
            if ( in_array( get_the_ID(), $displayed ) ){
                continue;
            }
            // update array with currently displayed post ID
            $displayed[] = get_the_ID();
    
            foreach ($cat_terms as $key => $cat) {
                if (count($cat_terms) == ($key + 1)) {
                    $datagroups .= '"' . $cat->name . '"';
                } else {
                    $datagroups .= '"' . $cat->name . '", ';
                }
            }
        ?>  
    

    可能帮助他人的来源: https://wordpress.stackexchange.com/questions/285091/avoid-duplicate-post-from-same-taxonomy