WordPress липкие посты и & quot; posts_per_page & quot; запутанным

У меня есть пользовательский цикл с этим аргументами:

$sticky = count(get_option('sticky_posts'));
$main_loop = array (
'posts_per_page' => 4 - $sticky
);

Я хочу сделать следующее:

  • 1 заметка: я хочу показать 3 сообщения + заметка
  • 2 липких сообщения: я хочу показать 2 сообщения + 2 заметки
  • 3 липких сообщения: я хочу показать 1 сообщения + 3 заметки
  • 4 липких сообщения: я хочу показать только 4 заметки

Но я не получу его на работу. На данный момент у меня следующая ситуация:

  • 1 заметка из 3 последних сообщений (1,2 или 3): у меня есть одна заметка + 2 сообщения
  • 1 заметка из четвертой (или более старой) записи (4,5,6 …): у меня есть 1 заметка + 3 сообщения (как я хочу)
  • 2 прикрепленных сообщения из четвертого (или более старого) сообщения (4,5,6 …): у меня есть 2 прикрепленных сообщения + 2 сообщения (как я хочу)
  • 3 прикрепленных сообщения из четвертого (или более старых) сообщений (4,5,6 …): у меня есть 3 прикрепленных сообщения + 1 сообщение (как я хочу)
  • 4 прикрепленных сообщения из четвертого (или более старых) сообщений (4,5,6 …): у меня есть 4 прикрепленных сообщения + 3 сообщения (но я хочу показать максимум 4 сообщения)

Короче: Когда я втыкаю посты из последних 3 постов, он не работает, а когда я втыкаю более 3 постов, он не работает.

Это полный цикл:

<section>
<h2>Aktuelles</h2>
<?php
$sticky = count(get_option('sticky_posts'));
// WP_Query arguments
$main_loop = array (
'posts_per_page' => 4 - $sticky
);

// The Query
$query = new WP_Query( $main_loop );

// The Loop
while ( $query->have_posts() ) : $query->the_post(); ?>
<h3><?php the_title(); ?></h3>
<?php the_excerpt(); ?>

<?php endwhile; wp_reset_postdata(); ?>
</section>

0

Решение

Так как я не нашел ответа на этот вопрос, я использовал другой подход с двумя объединенными циклами, которые всегда показывают 4 сообщения. Хитрость заключается в том, чтобы вычесть количество липких постов из второго цикла.

<?php
$sticky = count(get_option('sticky_posts'));
if ($sticky > 0) {
?>
<?php
// First loop with sticky posts
$main_loop_s = array (
'posts_per_page'         => $sticky,
'post__in' => get_option('sticky_posts'),
);
// The Query
$do_not_duplicate = array();
$query = new WP_Query( $main_loop_s );
// The Loop
while ( $query->have_posts() ) : $query->the_post(); $do_not_duplicate[] = $post->ID; ?>
<h3><?php the_title(); ?></h3>
<?php endwhile;
?>
<?php // stickycheck end
}
?>
<?php
$sticky = count(get_option('sticky_posts'));
if ($sticky < 4) {
?>
<?php
$allstickys = 4 - $sticky;
// Second loop with rest of posts up to 4
$main_loop_ns = array (
'posts_per_page'         => $allstickys,
'offset'                 => $sticky,
'post__not_in'           => $do_not_duplicate
);
// The Query
$query = new WP_Query( $main_loop_ns );
// The Loop
while ( $query->have_posts() ) : $query->the_post(); ?>
<h3><?php the_title(); ?></h3>
<?php endwhile; wp_reset_postdata();
?>
<?php // stickycheck end
}
?>
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]