Если у запроса Wordpress с таксономией меньше X, заполните другой запрос

Я немного застрял на пользовательском запросе.

В основном у меня есть запрос, который получает связанные "компании" (максимум 3) поста. Если в запросе нет 3, используйте другой запрос для заполнения пробелов (до 3). Кажется, я не могу заставить его делать то, что предполагается. В настоящее время его показ 6??? Не совсем уверен, где я иду не так!

$taxonomy = 'company';

// Get the post company
$terms = wp_get_post_terms( $the_post_id, $taxonomy );

$term_name = $terms[0]->name;

// Query for the related posts based on the company
$taxonomy_query = new WP_Query( array(

'tax_query' => array(
    array(
        'taxonomy' => $taxonomy,
        'field' => 'name',
        'terms'    => $term_name,
    ),
),
'post_type'=> 'post',
'post__not_in' => array($the_post_id),
'posts_per_page' => 3
) );

// Query for the non-related posts (use to fill the empty spaces)
$query = new WP_Query( array(

'category_name' => $cat_name,
'post_type'=> 'post',
'post__not_in' => array($the_post_id),
'posts_per_page' => 3
) );

У меня тогда есть выход из указанных запросов

<div class="l-row">

    <?php $count = 0; ?>

    <?php if ( $taxonomy_query->have_posts() ) : ?>

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

        <?php $related_posts = get_post(); ?>

        <?php $count++; ?>

        <div class="l-col-sm-4">

            <?php _module( 'tile', array(
                 'post'    => $related_posts,
                 'image'   => true,
                 'excerpt' => false
             ) ); ?>
        </div>

        <?php endwhile; ?>

    <?php endif; ?>

    <?php wp_reset_query(); ?>

    // New query to fill if the above query doesn't add up to 3

    <?php if ( $query->have_posts() ) : ?>

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

        <?php $related_posts = get_post(); ?>

        <?php $count++; ?>

        <div class="l-col-sm-4">

            <?php _module( 'tile', array(
                'post'    => $related_posts,
                'image'   => true,
                'excerpt' => false
            ) ); ?>

         </div>

        <?php if($count == 3) {
            break;
        } ?>

        <?php endwhile; ?>

    <?php endif; ?>

    <?php wp_reset_query(); ?>

</div>

Спасибо заранее, если кто-нибудь может указать мне в правильном направлении!

1 ответ

Решение

Ваша проблема здесь (при условии, что ваш код работает)

<?php if($count == 3) {
        break;
    } ?>

Если у вас есть 3 сообщения в первом запросе, ваш счет равен 3, вы увеличиваете счет 4-го числа перед вышеприведенным утверждением, и теперь он равен 4 и продолжается без выполнения вашего условия.

Лучший подход - это отказаться от перерыва и использовать оператор while

  <?php while ( $query->have_posts() && $count < 3 ) : $query->the_post(); ?>
Другие вопросы по тегам