Поддержка Проблемы и решения Получить посты за сегодня с помощью query_posts()

  • Решено dmitriy88

    (@dmitriy88)


    Как в данном цикле делать выборку только по сегодняшним постам?
    <?php while ( have_posts() ) : the_post(); ?>

    Что вообще лучше использовать, query_posts() или new WP_Query()?
    Как переписать мой цикл с использованием этих функций?
    Вот есть 2 конструкции

    $today = getdate();
    query_posts( 'year=' . $today["year"] . '&monthnum=' . $today["mon"] . '&day=' . $today["mday"] );
    $today = getdate();
    $query = new WP_Query( 'year=' . $today["year"] . '&monthnum=' . $today["mon"] . '&day=' . $today["mday"] );

    Как мне их внедрить в мой блог?

Просмотр 15 ответов — с 1 по 15 (всего 16)
  • Что вообще лучше использовать, 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 ни в какую.

    Есть какие-то идеи?

Просмотр 15 ответов — с 1 по 15 (всего 16)
  • Тема «Получить посты за сегодня с помощью query_posts()» закрыта для новых ответов.