Как вывести записи за определённый промежуток времени с момента публикации?

👍 Научим создавать сайты на WordPress бесплатно за 19 уроков. Подробнее →

Есть очень большая необходимость вывода последних постов за последние 7-10-14, да и вообще, любое указанное количество дней.

Я сделал так:

</pre>
<pre>'v_sortby=views&v_orderby=desc&

— это вывод по просмотрам, неинтересно.

Самое важное тут:

&w=' . $week . '

, он выводит 3 записи за последние 7 дней. Но, увы, дней календарных. А нужно, чтобы 7 дней с момента публикации.

Как такое можно реализовать? И реализацию такую, чтобы можно было устанавливать заданное количество дней от даты публикации поста, и в этом интервале был вывод постов?

Создай свой первый сайт на WordPress

box

Вебмастер, верстальщик.

Не умею заполнять поля «О себе».

Оцените автора
Добавить комментарий

  1. tiaurus

    А нужно, чтобы 7 дней с момента публикации

    С момента публикации чего?

    Пример кода для вывода постов за последние XX дней, начиная с даты просматриваемого поста (вставлять в single.php):

    <?php
      function filter_where($where = '') {
        //посты за последние 14 дней
        $where .= " AND post_date > '" . date('Y-m-d', strtotime('-14 days')) . "'";
        return $where;
      }
    add_filter('posts_where', 'filter_where');
        $args=array(
          'post_type' => 'post',       //показывать только посты
          'post_status' => 'publish',  //показывать только опубликованные
          'showposts' => -1,           //показывать все найденные
          'caller_get_posts'=> 1       //показывать все, начиная с первого найденного
          );
    $my_query=new WP_Query($args);
    remove_filter('posts_where', 'filter_where');
    
      if( $my_query->have_posts() ) {
        echo '<h2>Количество постов за последние 14 дней — '.count($my_query->posts) . '</h2>';
        while ($my_query->have_posts()) : $my_query->the_post(); ?>
          <p><?php the_time('d F Y') ?> <a href="<?php the_permalink() ?>" rel="bookmark" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a></p>
         <?php
        endwhile;
      }
    wp_reset_query();
    ?>
    
    Ответить
  2. box автор

    С момента публикации чего?

    С момента публикации поста, разумеется.

    Мне в блоке нужно вывести 3 материала, которые сортируются по просмотрам за 7 дней существования с момента публикации каждого и заменяются более актуальным по истечении этих 7/14/и т.п. дней.

    Ответить
    1. tiaurus

      Не рыбу я дал вам, но сеть :)
      Думаю, вы сами догадаетесь, как добавить в приведенный чуть выше код сортировку по просмотрам и ограничение количества постов тремя.

      Ответить
  3. box автор
    <?php 
    global $ti_option;
    ?>
    
    <section class="home-section format-posts">
    
        <?php if( get_sub_field( 'format_main_title' ) ): ?>
        <header class="section-header">
            <h2 class="title"><span><?php the_sub_field( 'format_main_title' ); ?></span></h2>
            <?php if ( get_sub_field( 'format_sub_title' ) ): ?>
            <span class="sub-title"><?php the_sub_field( 'format_sub_title' ); ?></span>
            <?php endif; ?>
        </header>
        <?php endif; ?>
        
    	<?php
    	/**
    	 * Get the format name which will filter the section
    	 * Check if format is standard or something else
    	**/
    	$format_name = get_sub_field( 'format_section_name' );
    	
    	if ( get_sub_field( 'format_section_name' ) == 'standard' ):
    		$format_args = array(
    				'taxonomy' => 'post_format',
    				'field' => 'slug',
    				'terms' =>  array( 'post-format-video', 'post-format-gallery', 'post-format-audio' ),
    				'operator' => 'NOT IN'
    			);
    	else:
    		$format_args = array(
    				'taxonomy' => 'post_format',
    				'field' => 'slug',
    				'terms' => 'post-format-'.$format_name
    			);
    	endif;
    	
    	$posts_to_show = get_sub_field( 'format_posts_per_page' );
    	
    	if ( get_sub_field ( 'format_pagination' ) == 'pagination_on' ){
    		
    		$paged = 1;
    		if ( get_query_var('paged') ) $paged = get_query_var('paged');
    		if ( get_query_var('page') ) $paged = get_query_var('page');
    		
    		$wp_query = new WP_Query(
    			array(
    				'post_type' => 'post',
    				'posts_per_page' => $posts_to_show,
    				'paged' => $paged,
    				'tax_query' => array( $format_args )
    			)
    		);
    	} else {
    		$wp_query = new WP_Query(
    			array(
    				'post_type' => 'post',
    				'posts_per_page' => $posts_to_show,
    				'tax_query' => array( $format_args )
    			)
    		);
    	}
    	
    	if ( $wp_query->have_posts() ) : 
    	?>
                
            <div class="grids entries">
    			<? $week = date('W');
    			query_posts('v_sortby=views&v_orderby=desc&w=' . $week . '&posts_per_page=3'); // за 1 неделю, по 3 штуки ?>
                <?php while ( $wp_query->have_posts() ) : $wp_query->the_post(); ?>
    
    тут вывод идёт
        
        <?php wp_reset_query(); ?>
    
    </section>

    Есть вот это вот, где существует своя выборка и фильтрация. И увы, сюда не удалось вклинить то, что Вы писали сверху. За что Вам большое спасибо и огромные благодарности. Сети прекрасные, но рыбу не поймал.

    Ответить
    1. tiaurus
      <?php
         function filter_where($where = '') {
           //посты за последние 14 дней
          $where .= " AND post_date > '" . date('Y-m-d', strtotime('-14 days')) . "'";
           return $where;
         }
       add_filter('posts_where', 'filter_where');
           $args=array(
            'post_type' => 'post',        //показывать только посты
            'post_status' => 'publish',   //показывать только опубликованные
            'showposts' => 3,             //показывать три поста
            'caller_get_posts'=> 1,       //показывать, начиная с первого найденного
            'orderby' => 'views',         //сортировать по количеству просмотров
            'order'    => 'DESC'          //сортировать от большего к меньшему
            );
      $my_query=new WP_Query($args);
       remove_filter('posts_where', 'filter_where');
      
         if( $my_query->have_posts() ) {
           echo '<h2>Количество постов за последние 14 дней — '.count($my_query->posts) . '</h2>';
           while ($my_query->have_posts()) : $my_query->the_post(); ?>
             <p><?php the_time('d F Y') ?> <a href="<?php the_permalink() ?>" rel="bookmark" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a></p>
            <?php
           endwhile;
         }
       wp_reset_query();
      ?>
      Ответить
      1. box автор

        Увы, этот код я не смог использовать для вывода того, что нужно именно мне.

        Скажите, tiaurus, как это грамотно встроить в тот кусок кода, который я публиковал выше и чтобы всё работало: сортировалось по тому периоду, который указан и сохранялся вывод, который установлен в теме?

        Ответить