Wordpress, foreach по таксономии показывает дубликаты - PullRequest
0 голосов
/ 22 ноября 2018

У меня есть приведенный ниже код, изначально он работает с учетом того, что он отображает продукты для всех таксономий.Однако, если для продукта задано 2 таксономии, он будет отображаться на странице дважды, а не показывать первый экземпляр продукта.

<?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 Ответ

0 голосов
/ 22 ноября 2018

Я понял это, по сути, мне просто нужно было проверить текущее сообщение в цикле, чтобы увидеть, было ли оно уже отображено:

<?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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...