Как в WordPress вывести посты за последнюю неделю.


WordPress имеет множество полезных функций, которые позволяют сделать практически все, что угодно. Например, вы легко можете выводить последние посты, посты из архива, свежие комментарии и прочее. При этом многие вещи доступны в виджетах, т.е. вам необязательно даже глядеть в код. Однако, что если вам нужно вывести посты только за последнюю неделю? «Родной» функционал WordPress пока, к сожалению, этого не позволяет. К счастью, это сделать не так сложно. В этой статье мы как раз узнаем, как реализовать эту задачу.

Итак, первое, что нам нужно сделать, это создать новую пользовательскую функцию в файле function.php. При этом в коде мы будем использовать стандартный запрос движка WP_Query. Вот как мы могли бы сделать это для вывода постов за текущую неделю:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function wp_this_week_posts() {
    $week = date('W');
    $year = date('Y');
    $the_query = new WP_Query('year=' . $year . '&w=' . $week );
    if ( $the_query->have_posts() ) :
        while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
            <h2><a href="<?php the_permalink(); ?>" title="Permanent link to <?php the_title(); ?> "><?php the_title(); ?></a></h2>
            <?php the_excerpt(); ?>
        <?php endwhile; ?>
        <?php wp_reset_postdata(); ?>
 
    <?php else:  ?>
    <p><?php _e( 'Sorry, no posts matched your criteria.' ); ?></p>
 
    <?php endif;
}

Как видно из кода, сначала мы получаем информацию о текущем годе и номере недели. Далее делаем запрос к базе данных с фильтром по году и неделе:

1
$the_query = new WP_Query('year=' . $year . '&w=' . $week );

И уже после этого проходимся в цикле по полученным постам и выводим о них информацию (заголовок и анонс).
Как видите, все просто. Если мы хотим выводить посты именно за прошлую неделю, то номер недели нам нужно еще и убавить на 1. Однако, что если это будет первая неделя года? Тогда мы получил некорректные данные для фильтра: неделя 0 и текущий год. Чтобы избежать этого, нам нужно добавить небольшую проверку номера недели.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function wp_last_week_posts() {
    $thisweek = date('W');
    $lastweek = ($thisweek != 1) ? $thisweek - 1 : 52;           
    $year = ($lastweek != 52) ? date('Y') : date('Y') - 1;  
    $the_query = new WP_Query('year=' . $year . '&w=' . $week );
    if ( $the_query->have_posts() ) :
        while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
            <h2><a href="<?php the_permalink(); ?>" title="Permanent link to <?php the_title(); ?> "><?php the_title(); ?></a></h2>
            <?php the_excerpt(); ?>
        <?php endwhile; ?>
        <?php wp_reset_postdata(); ?>
 
    <?php else:  ?>
    <p><?php _e( 'Sorry, no posts matched your criteria.' ); ?></p>
 
    <?php endif;
}

Как видите, код не стал намного длиннее. Тернарные операторы условия PHP позволили сделать лаконичную проверку. Мы проверяем, если номер недели равен 1, то мы присваиваем ей номер последней недели прошлого года 52 и, соответственно, уменьшаем год на 1.

Теперь функция будет работать корректно, а чтобы ее использовать в нужном месте вашей темы вставьте следующий вызов:

1
<?php wp_last_week_posts(); ?>

Либо же, можно создать специальный shortcode, добавив в function.php строчку:

1
add_shortcode('lastweekposts', 'wp_last_week_posts');

Далее просто добавьте в посте, на странице или в виджете код:

1
[lastweekposts]




Другие посты

Категория: WordPress

Оставить комментарий