Мне нужно иметь различное количество постов на странице на первой странице, чем на других страницах.
Например, это то, что мне нужно
- Всего сообщений: 6
- Первая страница: показаны 3 сообщения
- Следующая страница: показывает 2 сообщения на странице
Вот мой код:
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$fp_limit = 3; // first page limit
$limit = 2; // following page limit
$offset = 0; // default offset
if( $paged == 1 ) {
$limit = $fp_limit;
} else {
$offset = $fp_limit + ( ($paged - 2) * $limit );
}
$args = array(
'post_type' => 'my_post_type',
'post_status' => 'publish',
'offset' => $offset,
'posts_per_page' => $limit,
'caller_ get_ posts' => -1, // remove sticky post
'paged' => $paged,
'tax_query' => array(
array(
'taxonomy' => 'my_taxo',
'field' => 'slug',
'terms' => array('slug1', 'slug2', 'slug3')
)
)
);
$my_query = null;
$my_query = new WP_Query($args);
// basic loop
if( $my_query->have_posts() ) :
while ($my_query->have_posts()) : $my_query->the_post();
...
endwhile; endif; // archive loop
if (function_exists('wp_pagenavi')){ wp_pagenavi( array( 'query' => $my_query ) ); }
wp_reset_query();
На первой странице в архиве этот код предполагает:
Ну, всего 6 сообщений и 3 сообщения на странице. Поэтому мне нужно 2 архивных страницы, и я представляю вам пагинацию:
[1] [2]
Однако любая другая страница в архиве кода предполагает:
Ну, всего 6 сообщений и 2 сообщения на странице. Итак, мне нужно 3 архивных страницы, и я представляю вам пагинацию:
[1] [2] [3]
Нужна небольшая помощь, чтобы исправить это.
custom-post-types
loop
pagination
norixxx
источник
источник
'caller_ get_ posts'
содержит пробелы и не является действительным. Во-вторых, это устарело. Используйтеignore_sticky_posts
вместо этого.Ответы:
РЕДАКТИРОВАТЬ - ОТВЕТ
Я работаю над другим решением, которое на самом деле лучше оригинального ответа. Это не связано с каким-либо настраиваемым запросом, и я думаю, что во всех целях мой исходный ответ можно отбросить, но сохранить в информационных целях.
Я все еще верю, что вы находитесь на главной странице, и также буду относиться к этому как таковой. Так что это мое новое решение
ШАГ 1
Удалите пользовательский запрос с домашней страницы и замените его циклом по умолчанию
ШАГ 2
Используйте
pre_get_posts
для изменения основного запроса, чтобы добавить свою собственную таксономию в основной запрос для отображения на главной странице.ШАГ 3
Теперь, получите
posts_per_page
параметр, установленный из серверной части (который я предполагаю равным 2), а также установите ваш,offset
который мы будем использовать. Это будет так,1
как вам нужно 3 сообщения на первой странице и 2 на остальныхШАГ 4
На первой странице, вам необходимо добавить
offset
кposts_per_page
будет добавить до 3 , чтобы получить свои три сообщения на первой странице.ШАГ 5
Вы должны применить свою
offset
на всех последующих страницах, в противном случае вы получите повторение последнего поста страницы на следующей страницеШАГ 6
Наконец, вам нужно вычесть свое смещение из-за того, что
found_posts
ваша нумерация страниц на последней странице будет неправильной и даст вам404
ошибку, так как последнее сообщение будет отсутствовать из-за неправильного количества сообщенийПРИМЕЧАНИЕ. Этот фрагмент кода нарушил нумерацию страниц на странице поиска. Это теперь исправлено, смотрите обновленный код
ВСЕ ВМЕСТЕ
Вот так будет выглядеть ваш полный запрос, который должен идти в functions.php
источник
Я знаю, что это было 1000 лет назад, но другое решение для тех, кто ищет это решение при использовании пользовательского запроса, вот как это сделать. В этом примере первой странице нужно 10 сообщений, а каждой последующей - 9.
а затем в массиве использовать это:
Теперь ты в порядке.
источник