Пропуск первых 3 записей в WP Query

18 сент. 2015 г., 17:55:01
Просмотры: 28.1K
Голосов: 5

Вот запрос, который я использую.

<?php $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$wp_query = new WP_Query('order=asc&orderby=meta_value&meta_key=date&posts_per_page=6&paged=' . $paged); ?>

Есть ли способ пропустить первые 3 записи только на первой странице (?paged=1) и не пропускать на других страницах (?paged=2....)

0
Все ответы на вопрос 4
1

Для пропуска постов просто используйте параметр offset в wp_query.

Чтобы отобразить три последних поста:

<?php
$latestpost = new WP_Query('order=asc&orderby=meta_value&meta_key=date&posts_per_page=3');

//Здесь добавьте цикл для отображения постов, например:

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

the_title();

the_content();

endwhile; wp_reset_query();

//После этого пропустите три поста с помощью offset

 $latestpost = new WP_Query('order=asc&orderby=meta_value&meta_key=date&posts_per_page=6&offset=3&paged=' . $paged); 

the_title();

the_content();

endwhile; wp_reset_query();

?>

Вот и всё

18 сент. 2015 г. 18:33:27
Комментарии

но это сбивает пагинацию, то есть пагинация не работает... в любом случае, спасибо за ответ

Megh Gandhi Megh Gandhi
18 сент. 2015 г. 19:48:47
0

http://www.smashingmagazine.com/2009/06/10-useful-wordpress-loop-hacks/#2-use-more-than-one-loop-on-a-page-without-printing-duplicate-posts

Я просто последовал этому методу и внес некоторые изменения...

// в functions.php
$mega = new WP_Query('order=asc&orderby=meta_value&meta_key=date&posts_per_page=3');
// установил количество постов на странице равным 3, чтобы отображались ID первых 3 постов
$ids = array();
while ($mega->have_posts()) : $mega->the_post();
$ids[] = get_the_ID();

endwhile;

После этого для основного цикла, чтобы пропустить первые три поста, я немного изменил цикл.

   $args= array(
'post_type' => 'post',
'posts_per_page' => 6,
'paged' => $paged,
'order'=> 'asc',
'orderby'=> 'meta_value',
'meta_key'=>'date',
'post__not_in' => $ids

 );
    $wp_query = new WP_Query($args);

И это работает так, как я хотел...

18 сент. 2015 г. 22:46:38
5

Используя параметр offset: https://codex.wordpress.org/Class_Reference/WP_Query#Pagination_Parameters

$wp_query = new WP_Query('order=asc&orderby=meta_value&meta_key=date&posts_per_page=6&offset=3&paged=' . $paged); ?>
18 сент. 2015 г. 17:59:17
Комментарии

это нарушает пагинацию.. ?paged=2 показывает те же записи

Megh Gandhi Megh Gandhi
18 сент. 2015 г. 18:12:27

@MeghGandhi вы понимаете, что проблема с пагинацией никак не связана с параметром offset. Ваш запрос уже сломал пагинацию.

Robert hue Robert hue
18 сент. 2015 г. 20:45:54

на самом деле WordPress генерирует свой собственный offset, что делает пагинацию рабочей, а когда мы вручную устанавливаем параметры, это ломает пагинацию.. http://codex.wordpress.org/Making_Custom_Queries_using_Offset_and_Pagination

Megh Gandhi Megh Gandhi
18 сент. 2015 г. 21:01:43

Я бы еще раз проверил пагинацию.. иногда ее бывает сложно правильно реализовать. Попробуй выполнить запрос без свойств posts_per_page и paged и посмотреть, будет ли пагинация работать корректно на основе стандартных настроек WordPress (Настройки > Чтение).

deflime deflime
18 сент. 2015 г. 21:23:34

http://www.smashingmagazine.com/2009/06/10-useful-wordpress-loop-hacks/#2-use-more-than-one-loop-on-a-page-without-printing-duplicate-posts ну я использовал этот метод, добавил код в functions и все работает, ура!

Megh Gandhi Megh Gandhi
18 сент. 2015 г. 22:35:58
0

Вместо использования атрибута offset вы думали о создании переменной со значением 1, которая увеличивается в цикле. Если цикл меньше 4, ничего не делать, иначе

<?php
    $p=1;
    while ( have_posts() ) : the_post();
        if($p > 3) {
?>
// ВЫПОЛНЯЕМ ДЕЙСТВИЯ

Это не решает проблему, но, возможно, можно установить условие, что если это первая страница, то пропустить первые 3?

28 окт. 2016 г. 19:58:02