Có một số theme hỗ trợ tính năng cho phép đánh dấu bài nổi bật để hiển thị trên trang chủ. Tuy nhiên nếu bạn đang cần chỉnh sửa 1 theme không hỗ trợ thì bạn phải tự mình xây dựng. Có một số giải pháp để bạn lựa chọn như:
- Tạo một category đặc biệt chỉ dành để chứa các bài viết nổi bật rồi bạn chỉ code lấy bài viết từ category đó.
- Add tag đặc biệt ví dụ “feature” để đánh dấu bài viết nổi bật rồi chỉ cần code lấy các bài viết có chứa tag này.
2 cách ở trên đều là giải pháp nhưng nó thật sự không hay cho lắm. Bài viết này sẽ hướng dẫn bạn tạo thêm 1 phần tùy chọn trong trang tạo bài viết để đánh dấu bài viết nổi bật và ta có thể dễ dàng bật tắt. Đó là cách tạo thêm meta box để chứa thông tin nhận dạng bài viết nổi bật.
Bước 1: Tạo mục tùy chỉnh cho tính năng bài viết nổi bật trong trang chỉnh sửa bài viết
Bạn vào tập tin functions.php và chèn đoạn mã PHP phía dưới vào
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <?php function sm_custom_meta() { add_meta_box( 'sm_meta', __( 'Featured Posts', 'sm-textdomain' ), 'sm_meta_callback', 'post' ); } function sm_meta_callback( $post ) { $featured = get_post_meta( $post->ID ); ?> <p> <div class="sm-row-content"> <label for="meta-checkbox"> <input type="checkbox" name="meta-checkbox" id="meta-checkbox" value="yes" <?php if ( isset ( $featured['meta-checkbox'] ) ) checked( $featured['meta-checkbox'][0], 'yes' ); ?> /> <?php _e( 'Featured this post', 'sm-textdomain' )?> </label> </div> </p> <?php } add_action( 'add_meta_boxes', 'sm_custom_meta' ); ?> |
Kết quả thu được sẽ như hình dưới.
Tuy vậy nhưng hiện tại chỉ dừng lại ở mức giao diện và nếu muốn nó thực sự lưu vào cơ sở dữ liệu thì bạn tiếp tục bước 2.
Bước 2: Lưu dữ liệu cho tùy chỉnh
Bạn tiếp tục viết thêm đoạn mã sau trong functions.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <?php function sm_meta_save( $post_id ) { $is_autosave = wp_is_post_autosave( $post_id ); $is_revision = wp_is_post_revision( $post_id ); $is_valid_nonce = ( isset( $_POST[ 'sm_nonce' ] ) && wp_verify_nonce( $_POST[ 'sm_nonce' ], basename( __FILE__ ) ) ) ? 'true' : 'false'; if ( $is_autosave || $is_revision || !$is_valid_nonce ) { return; } if( isset( $_POST[ 'meta-checkbox' ] ) ) { update_post_meta( $post_id, 'meta-checkbox', 'yes' ); } else { update_post_meta( $post_id, 'meta-checkbox', '' ); } } add_action( 'save_post', 'sm_meta_save' ); ?> |
Vậy là xong. Phần thêm tùy chỉnh cho backend.
Bước 3: Lấy bài viết nổi bật
Để lấy các bài viết có đánh dấu nổi bật bạn code query như sau:
1 2 3 4 5 6 7 8 | <?php $args = array( 'posts_per_page' => 5, //Số lượng bài viết muốn lấy 'meta_key' => 'meta-checkbox', 'meta_value' => 'yes' ); $featured = new WP_Query($args); ?> |
Rồi giờ muốn hiện ở đâu thì code tiếp.
1 2 3 4 5 6 7 8 9 10 11 12 13 | <?php if ($featured->have_posts()): while($featured->have_posts()): $featured->the_post(); ?> <h3><a href="<?php the_permalink(); ?>"> <?php the_title(); ?></a></h3> <p class="details">By <a href="<?php the_author_posts() ?>"><?php the_author(); ?> </a> / On <?php echo get_the_date('F j, Y'); ?> / In <?php the_category(', '); ?></p> <?php if (has_post_thumbnail()) : ?> <figure> <a href="<?php the_permalink(); ?>"><?php the_post_thumbnail(); ?></a> </figure> <p ><?php the_excerpt();?></p> <?php endif; endwhile; else: endif; ?> |
Chú ý đây chỉ là phần code mẫu nên có thể tùy theo bố cục mà bạn có thể tùy chỉnh các thẻ cho phù hợp cũng như thêm bớt các yếu tố (biến) để gọi các thông số của bài viết cho phù hợp.
Chúc các bạn thành công.
Huỳnh Mai Anh Kiệt