Intereting Posts
Расширенные пользовательские поля из оператора категории – IF Как исправить недостающее изображение Восстановить пароль только по имени пользователя. Пользователи с одинаковым адресом электронной почты Подсчет и отображение кликов по внешним ссылкам на одной странице / сообщении дата изменения значения персонализированного поля в unix timestamp Как задержать отображение элементов страницы до тех пор, пока скрипт, установленный в очереди, не ввел html Опубликовать в категории, основанной на домене электронной почты, для плагина post-by-email Индивидуальный перевод метабокса Перенаправить URL-адрес сайта WordPress в другую ссылку Эквивалентно in_category () для подкатегорий Форма контакта 7 от добавления абзаца и разрыва тегов в сообщениях электронной почты HTML WordPress JSON API возвращает нормальную страницу сайта в html. Как мне заставить его дать JSON? Как заказывать сообщения по названию после того, как они уже отсортированы по категориям Использование пользовательской функции с расширенными настраиваемыми полями Индивидуальная компоновка страницы после листинга пользовательского типа сообщения

Как выбрать конкретный запрос при настройке смещения?

В wordpress я добавил функцию, которая устанавливает смещение так:

add_action('pre_get_posts', 'myprefix_query_offset', 1 ); function myprefix_query_offset(&$query) { if ( ! $query->is_home() ) { return; } $offset = 1; $ppp = 3; if ( $query->is_paged ) { $page_offset = $offset + ( ($query->query_vars['paged']-1) * $ppp ); $query->set('offset', $page_offset ); } else { $query->set('offset',$offset); } } 

Что это за функция, это добавить смещение 1, чтобы первое сообщение не отображалось. Это прекрасно работает.

Но, конечно, с '! Query-> is_home' он мутно сокращает каждый первый пост из каждого запроса на моем сайте.

Что мне нужно сделать, это применить эту функцию только к одному запросу.

Поэтому мой вопрос: как я могу выбрать конкретный запрос, возможно даже, возможно, мне нужно сделать это по-другому?

______________________ Решение, которое работало для меня __________________________

Мне удалось установить параметр «смещение» в цикле на моей странице шаблона «page-blog.php», как это, не разбивая разбиение на страницы (в functions.php):

 add_action('pre_get_posts', 'myprefix_query_offset', 1 ); function myprefix_query_offset(&$query) { if ( !is_page_template( 'page-blog.php' ) ) { return ; } $offset = 1; $ppp = 3; if ( $query->is_paged() ) { $page_offset = $offset + ( ($query->query_vars['paged']-1) * $ppp ); $query->set('offset', $page_offset ); } else { $query->set('offset',$offset); } } 

Поэтому теперь он применяет параметр смещения ко всем петлям на этой странице, которые выгружаются. Чтобы сделать это применимым только к запрограммированным запросам, мне пришлось добавить параметр «posts_per_page» => -1 'к запросу, который не выгружен и не требует смещения. Так что в моем случае это было:

 $featured_item = array( 'post_type'=> 'post', 'status' => 'publish', 'posts_per_page'=> -1 ); get_posts($featured_item); 

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

Большое спасибо s_h_dum, я всегда благодарен за вашу помощь!

Если вы хотите использовать один, единственный запрос, то просто можете передать аргумент offset через массив аргументов.

 $offset = 1; $ppp = 3; if ( $query->is_paged ) { $page_offset = $offset + ( ($query->query_vars['paged']-1) * $ppp ); } blog_items = array( 'post_type'=> 'post', 'paged' => $paged, 'posts_per_page'=> $ppp, 'status' => 'publish', 'offset' => $offset ); $blogposts = get_posts($blog_items); 

Но поскольку вы пытаетесь разбиться на страницы, у вас все еще могут быть проблемы с этим. Может работать лучше, чтобы проталкивать все аргументы через pre_get_posts не только некоторые из них:

 // in functions.php add_action('pre_get_posts', 'myprefix_query_offset', 1 ); function myprefix_query_offset(&$query) { if (is_main_query() || is_page_template( 'page-blog.php' ) ) { $offset = 1; $ppp = 3; if ( $query->is_paged ) { $page_offset = $offset + ( ($query->query_vars['paged']-1) * $ppp ); $query->set('offset', $page_offset ); } else { $query->set('offset',$offset); } $query->set('post_type','post'); $query->set('paged',$paged); $query->set('posts_per_page',3); $query->set('status','publish'); } } 

Тогда нормальный цикл в шаблоне страницы должен работать:

 if(have_posts()) { while(have_posts()) { the_post(); } } 

Используйте remove_action('pre_get_posts', 'myprefix_query_offset', 1 ); для удаления действия.