👍 Научим бесплатно правильно создавать сайты на WordPress. Подробнее →
Есть очень большая необходимость вывода последних постов за последние 7-10-14, да и вообще, любое указанное количество дней.
Я сделал так:
</pre> <pre>'v_sortby=views&v_orderby=desc&
— это вывод по просмотрам, неинтересно.
Самое важное тут:
&w=' . $week . '
, он выводит 3 записи за последние 7 дней. Но, увы, дней календарных. А нужно, чтобы 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(); ?>С момента публикации поста, разумеется.
Мне в блоке нужно вывести 3 материала, которые сортируются по просмотрам за 7 дней существования с момента публикации каждого и заменяются более актуальным по истечении этих 7/14/и т.п. дней.
Не рыбу я дал вам, но сеть :)
Думаю, вы сами догадаетесь, как добавить в приведенный чуть выше код сортировку по просмотрам и ограничение количества постов тремя.
<?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>Есть вот это вот, где существует своя выборка и фильтрация. И увы, сюда не удалось вклинить то, что Вы писали сверху. За что Вам большое спасибо и огромные благодарности. Сети прекрасные, но рыбу не поймал.
<?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(); ?>Увы, этот код я не смог использовать для вывода того, что нужно именно мне.
Скажите, tiaurus, как это грамотно встроить в тот кусок кода, который я публиковал выше и чтобы всё работало: сортировалось по тому периоду, который указан и сохранялся вывод, который установлен в теме?