WordPress mặc định hỗ trợ cho chúng ta rất nhiều chế độ hiển thị bài viết. Nào là hiển thị những bài viết gần nhất, phổ biến nhất, ưa chuông nhất và cả những danh sách bài viết theo ngày tháng… Hôm nay mình sẽ chia sẻ cho các bạn thêm một thủ thuật để hiển thị danh sách bài viết được post trong thời gian là tuần vừa qua (so với hiện tại).
Với thủ thuật này , các bạn có thể tạo một khu vực riêng trên trang chủ và liệt kê những bài viết này cho khách viếng thăm website hay blog của bạn biết được những bài viết mới nhất, được post trong tuần vừa rồi. Việc làm này sẽ làm cho bài viết cũ của bạn sẽ không bị trôi đi, và cũng sẽ tăng lượng truy cập đáng kể cho website của các bạn.
Để bắt đầu, trước hết chúng ta hãy xem cách liệt kê những bài viết được đăng trong tuần hiện tại bằng cách sử dụng WP_Query. Các bạn copy và dán đoạn code bên dưới vào trong file functions.php nằm tại folder theme mà các bạn đang dùng.
function posts_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;
}
Trong đoạn code bên trên, chỉ cần chúng ta chèn đoạn code <?php posts_this_week(); ?> này vào bất kì file nào trong theme mà bạn muốn hiển thị, là nó sẽ hiển thị ngay danh sách những bài viết được đăng trong tuần hiện tại.
Nhưng đoạn code bên trên vẫn không phải là cái mà chúng ta muốn , để hiển thị danh sách bài viết trong tuần vừa qua (so với hiện tại) thì chúng ta chỉ cần lấy giá trị tuần hiện tại và trừ đi 1 là xong. Tuy nhiên nếu như chúng ta đang ở thời điêm tuần hiện tại của năm mới thì không thể trừ đi 1 được. Và đây là cách mà chúng ta sẽ giải quyết vấn đề này :
function 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;
}
Trong đoạn code bên trên , chúng ta có 2 điều kiện : Một là nếu tuần hiện tại không phải là tuần đầu của năm mới, thì tuần vừa qua sẽ bằng tuần hiện tại trừ đi 1. Hai là nếu tuần hiện tại là tuần đầu năm mới thì tuần vừa qua sẽ có giá trị là 52 ( đây là tuần cuối cùng trong một năm ) và đồng thời giá trị Năm cũng sẽ bị trừ đi 1.
Tương tự, để có thể hiển thị ra ngoài danh sách này, các bạn chỉ việc chèn đoạn code <?php last_week_posts(); ?> này vào bất kì file nằm nằm trong folder theme mà các bạn muốn hiển thị. Ngoài ra nếu các bạn muốn tạo một shortcode để hiển thị trên các plugin hay widget thì có thể chèn thêm đoạn code này vào bên trong file functions.php.
add_shortcode('lastweek', 'last_week_posts');
Và mỗi khi bạn cần dùng, thì chỉ cần chèn shortcode [lastweek] như thế này vào trong bài viết (post), trang (page) hay widget là xong .
Mình mong là với thủ thuật này, các bạn sẽ có thêm kinh nghiệm trong việc hiển thị những nội dung theo ý muốn của mình trong WordPress. Và nếu có thêm bất kì thông tin hay câu hỏi nào, thì đừng ngần ngại để lại lời nhắn dưới dạng comments nhé.