Многие новички в WordPress вскоре всё-таки начинают редактировать свои темы WordPress, и именно поэтому мы опубликовали статью Шпаргалка по темам WordPress. Иногда у новичков появляются некоторые проблемы. С одной из таких обратился наш читатель, поинтересовавшийся, как вывести все записи за последнюю неделю в WordPress. Он хотел добавить раздел на главной странице, который бы отображал записи из блога за прошедшую неделю. Мы уже писали в недавней статье, как реализовать подобное с помощью кода, но и код был маленький, и не особо настраиваемый… В этой статье мы покажем вам как вывести записи за прошедшую неделю в WordPress.
Прежде чем мы продемонстрируем как вывести посты за последнюю неделю, давайте сначала посмотрим как вы можете вывести записи за текущую неделю с помощью WP_Query. Скопируйте и вставьте следующий код в файл functions.php вашей темы или в плагин для сайта WordPress:
function wpb_this_week() { $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; }
На примере выше сначала мы определяем текущую неделю и год. Затем мы используем полученные значения в WP_Query для вывода записей за текущую неделю. Теперь всё, что нужно, это добавить код
<?php wpb_this_week(); ?>
в то место вашей темы, где нужно вывести записи.
Всё достаточно просто, не так ли? Сейчас же, для того, чтобы вывести записи за прошедшую неделю нам нужно отнять единицу от текущего значения недели. Но, если это будет первая неделя в году, то мы получим для недели значение 0 и текущий год вместо предыдущего. Вот как можно решить эту проблему:
function wpb_last_week_posts() { $thisweek = date('W'); if ($thisweek != 1) : $lastweek = $thisweek - 1; else : $lastweek = 52; endif; $year = date('Y'); if ($lastweek != 52) : $year = date('Y'); else: $year = date('Y') -1; endif; $the_query = new WP_Query( 'year=' . $year . '&w=' . $lastweek ); 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; }
На примере выше мы сделали две проверки. Первая проверка устанавливает значение прошлой недели в 52 (что является последней неделей в году), когда значение текущей недели равно 1. Вторая проверка устанавливает значение года в предыдущий год, когда значение для последней недели равно 52.
Для того, чтобы вывести записи за последнюю неделю вам нужно добавить код
<?php wpb_last_week_posts(); ?>
в то место вашей темы, где нужно вывести записи. Или же, если вы хотите использовать шорткод для добавления блока на страницу или виджет, тогда просто добавьте нижеследующую строку в конце приведенного выше кода.
add_shortcode('lastweek', 'wpb_last_week_posts');
Теперь вы можете использовать шорткод в записи, на странице или в виджете следующим образом:
[lastweek]
Учтите, что вам не нужно всегда использовать именно функцию WP_Query для создания собственных запросов. В WordPress есть много встроенных функций, позволяющих вам вывести свежие записи, архивы, комментарии и т.д. Если есть более простой способ с использованием существующих функций, то совсем не обязательно писать собственные запросы.
Надеемся, что эта статья поможет вам вывести записи за прошедшую неделю в WordPress. Можете экспериментировать с кодом и модифицировать его под свои нужды. Отзывы, как всегда, пишите в комментарии ниже.