Как увеличить сообщения в определенной категории - PullRequest
0 голосов
/ 15 апреля 2019

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

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


    <?php while ($query->have_posts()) {

         if( $query -> post_count > 0 ) {

                 $postnum = 0;

         foreach( $query -> posts as $post ) {

                  $postnum++;

                  if( $postnum%5 == 0 ) {

                    $args = array( 'cat' => 1824, 'posts_per_page' => 1, );
                    query_posts( $args );
                    $current_post = 0;
                    while ( have_posts() ) : the_post();
                        $current_post++;

                        echo "CTA Card Specific Info";
                    endwhile;

                }

                $query->the_post();


            ?>```

1 Ответ

1 голос
/ 15 апреля 2019

Вместо использования query_posts() вы можете вкладывать пыльник WP_Query внутрь первого и использовать параметр offset , чтобы пропустить уже выведенные вами сообщения. Я не тестировал этот код, но что-то вроде следующего может работать:

$post_count = 0;
$category_count = 0; // for determining offset
$args = array(
    'post_type'        => 'post',
    'posts_per_page'   => -1,
    'category__not_in' => 1824, // or something like this to prevent duplicates
);
$post_query = new WP_Query ( $args );

if ( $post_query->have_posts() ) {

    while ( $post_query->have_posts() ) : $post_query->the_post();

        $post_count++;

        echo "Regular Post Here";

        if ( $post_count % 6 === 0 ) {

            $args = array(
                'cat'            => 1824,
                'posts_per_page' => 1, 
                'offset'         => $category_count,
            );
            $category_query = new WP_Query( $args );
            $category_count++;

            if ( $category_query->have_posts() ) {

                while ( $category_query->have_posts() ) : $category_query->the_post();

                    echo "CTA Card Specific Info";

                endwhile; $post_query->reset_postdata();
            }

        }


    endwhile;

}

Как только вы закончили с внутренним циклом, обязательно вызовите reset_postdata(), чтобы изменить контекст запроса обратно на основной запрос.

Стоит также отметить, что использование offset может испортить вашу нумерацию страниц . Я не думаю, что это вступит в силу здесь, но если вы заметите проблемы с разбиением на страницы, которые могут быть виновником.

...