Что вообще лучше использовать, query_posts() или new WP_Query()?
https://wpmag.ru/2014/query_posts-wordpress/
всегда используйте только WP_Query — у query_posts полным полно недостатков. один из старейших — это сломанная навигация.
С этим понятно, спасибо.
Хотел еще уточнить. Как сделать так, чтобы сделать выборку постов не за сегодняшний день, а начиная с сегодняшнего дня, т.е. и за будущие даты?
У меня на странице используется 2 цикла. <?php rewind_posts(); ?>
в этом случае нужно делать обязательно? И нужно ли делать wp_reset_postdata()
и куда его вставлять?
вывод неопубликованных записей?
вы это хотите получить?
Да, это у меня в блоге уже настроено (вывод будущих постов).
Нужно ли мне для случая 2-х циклов и при использовании new WP_Query()
делать между циклами <?php rewind_posts(); ?>
?
я не знаю, зачем вы используете rewind_posts и для каких целей. собственно, боюсь, что здесь мало людей с опытом создания циклов для неопубликованных записей.
Вы можете в явном виде ответить? Я сейчас для общего случая спрашиваю, а не для неопубликованных постов.
Вы можете в явном виде ответить?
конечно:
https://codex.wordpress.org/Function_Reference/rewind_posts
Rewind the loop posts in order to re-use the same query in different locations on a page.
ответ вполне исчерпывающий.
В общем, есть такой код
<?php if ( have_posts() ) :
query_posts('posts_per_page=-1&cat=4&orderby=date(dmY)&order=ASC'); ?>
<h1>Заголвоок H1</h1>
<?php while ( have_posts() ) : the_post(); ?>
<?php get_template_part( 'anons', 'content1', get_post_format() ); ?>
<?php endwhile; ?>
<?php rewind_posts(); ?>
<?php query_posts('posts_per_page=10&cat=5,8,12&orderby=date(dmY)&order=DESC'); ?>
<h2>Заголовок H2</h2>
<?php while ( have_posts() ) : the_post(); ?>
<?php get_template_part( 'anons', 'content2', get_post_format() ); ?>
<?php endwhile; ?>
<?php else : ?>
<?php get_template_part( 'content', 'none' ); ?>
<?php endif; ?>
Можно ли убрать отсюда условие if ( have_posts() ) :
?
И как мне здесь переделать код под wp_query()? Пробую вместо первого цикла вставлять данную конструкцию (просто с одним аргументом для теста), но WordPress не дает мне сохранить файл с ошибкой ‘Maximum execution time of 30 seconds exceeded’.
<?php
$args = array(
'posts_per_page' => -1
);
$my_query = new WP_Query( $args );
if ($my_query->have_posts()) {
while ($my_query->have_posts()) {
$my_query->the_posts();
get_template_part( 'anons', 'content1', get_post_format() );
wp_reset_postdata();
?>
Даже убрав второй цикл, та же ошибка, не дает сохранить код.
'posts_per_page' => -1
если у вас там несколько сотен, а то и тысяч записей — то ошибка Maximum execution time of 30 seconds exceeded
вполне понятна.
Забыл уточнить. При любом числе такая ошибка. Это именно при сохранении файла, а не при открытии сайта, т.е. я даже не могу сохранить изменения и посмотреть, что выводится на сайте.
С query_posts все работает, а вот с wp_query ни в какую.
ну в коде у вас не закрыты скобки {
— поэтому не сохраняется.
а вообще, писать новые циклы в редакторе wordpress — моветон.
правьте локально, заливайте по ftp.
Криво скопировал код сюда, прошу прощения.
Вот точный
<?php
$i = 0;
$currentdate = date("YmdHi", strtotime("+3 hours"));
global $currentdate;
$currentdate_unix = date("U") + 10800;
$args = array(
'posts_per_page' => -1,
'cat' => 4,
'orderby' => 'date(dmY)',
'order' => 'ASC'
);
?>
<?php $my_query = new WP_Query( $args ); ?>
<?php while ($my_query->have_posts()) : $my_query->the_posts(); ?>
<?php
$expirationdate_unix = get_the_date("U") + 10800;
if ( $expirationdate_unix > $currentdate_unix ) {
$i++;
if (($i % 2) == 1) echo '<div class="row">';
get_template_part( 'anons', 'content', get_post_format() );
if (($i % 2) == 0) echo '</div>';
} ?>
<?php endwhile; ?>
<?php if ( 1 == ($i % 2)) echo '</div>'; ?>
<?php wp_reset_postdata(); ?>
Пробую даже с одним циклом, а не с двумя, все равно ничего не выводит.
Уточняю по коду. Он выводит записи с будущей датой (анонсы мероприятий) и после наступления события оно пропадет с сайта через 3 часа. Заливаю по FTP. Повторюсь, с query_posts все работает, а вот с wp_query ни в какую.