Hàm get_post() trong WordPress dùng để lấy dữ liệu của bài viết cụ thể nào đó (theo post_id) như tiêu đề, tác giả, ngày giờ post bài. Hàm này cần 3 tham số truyền vào để lấy dữ liệu trả về: $post, $output, $filter.
Table of Contents
Hàm get_post() nằm ở đâu?
Hàm này nằm ở trong core nguồn của WordPress. Các bạn có thể tìm thấy hàm này tại file này: wp-includes/post.php
. Đây là hàm nguyên bản của WordPress:
function get_post( $post = null, $output = OBJECT, $filter = 'raw' ) { if ( empty( $post ) && isset( $GLOBALS['post'] ) ) { $post = $GLOBALS['post']; } if ( $post instanceof WP_Post ) { $_post = $post; } elseif ( is_object( $post ) ) { if ( empty( $post->filter ) ) { $_post = sanitize_post( $post, 'raw' ); $_post = new WP_Post( $_post ); } elseif ( 'raw' === $post->filter ) { $_post = new WP_Post( $post ); } else { $_post = WP_Post::get_instance( $post->ID ); } } else { $_post = WP_Post::get_instance( $post ); } if ( ! $_post ) { return null; } $_post = $_post->filter( $filter ); if ( ARRAY_A == $output ) { return $_post->to_array(); } elseif ( ARRAY_N == $output ) { return array_values( $_post->to_array() ); } return $_post; }
Vì nó nằm trong core rồi nên mình chỉ đưa ra minh họa bên trên. Bạn không cần quan tâm đến nó mà chỉ cần tìm hiểu cách sử dụng nó ở bên dưới đây.
Cách sử dụng
<?php get_post( $id, $output, $filter ); ?>
Trong đó:
$id: Giá trị truyền vào nhằm xác định bài viết cần lấy thông tin. Nếu $id không có thì nó sẽ lấy $id của post hoặc page hiện tại.
$output: Mặc định thì nó sẽ trả về một đối tượng WP_Post (WP_Post object). Nếu bạn muốn nó trả về dạng mảng thì có thể truyền giá trị $output là ARRAY_A hoặc ARRAY_N.
$filter: Tham số này để định dạng giá trị trả về. Mặc định là giá trị trả về dạng raw, nghĩa là không bị lọc gì. Bạn có thể sử dụng một trong các giá trị truyền vào cho tham số này như: raw (mặc định), edit, db, display, attribute or js.
Tham khảo cách dùng hàm get_terms()
Giá trị trả về
Hàm get_post() trả về một đối tượng WP_Post (WP_Post object). Hàm get_post() sẽ trả về 18 thông số như danh sách bên dưới đây:
- ID
- post_author
- post_name
- post_type
- post_title
- post_date
- post_date_gmt
- post_content
- post_excerpt
- post_status
- comment_status
- ping_status
- post_password
- post_parent
- post_modified
- post_modified_gmt
- comment_count
- menu_order
Từ danh sách trả về đó, chúng ta hoàn toàn có thẻ lấy riêng từng giá trị hoặc lấy tất cả. Dưới đây là một ví dụ việc lấy giá trị tác giả bài viết có ID là 18:
<?php $post = get_post(18); echo $post->post_author; ?>
Tương tự như vậy, nếu bạn muốn lấy giá trị nào thì chỉ cần chuyển tương ứng giá trị cần lấy. Ví dụ dưới đây sẽ lấy tiêu đề của bài viết. Lưu ý đây là tiêu đề chuẩn của bài viết chứ không phải SEO Title đâu nhé.
<?php $post = get_post(18); echo $post->post_title; ?>
Lấy nội dung của post bằng hàm get_post()
Nếu bạn muốn lấy nội dung của bài viết theo post id (get post by id) thì có thể dùng hàm bên dưới đây. Mặc dù các bạn có thể dùng cách nhanh hơn là get_post(18)->post_content;
Tuy nhiên, hàm dưới đây sẽ tinh chỉnh chút ít để trả về dữ liệu chuẩn hơn. Bạn hãy đọc và tham khảo rồi tìm hiểu thêm nhé.
function get_postcontent_by_id($post_id) { $content_post = get_post($post_id); $content = $content_post->post_content; $content = apply_filters('the_content', $content); $content = str_replace(']]>', ']]>', $content); return $content; }
Các bạn lưu ý là hàm này khác hoàn toàn với hàm get_posts() nhé.
Hàm này các bạn có thể sử dụng thoải mái ở Plugin hoặc ở template và không cần phải defines bất kỳ thông số nào. Nó có thể hoạt động độc lập trong môi trường nội bộ của WordPress như ở Plugins hay ở trong Theme.
Các bạn có thể tham khảo thêm thông tin ở trang hỗ trợ chính thức của hàm này trên trang WordPress for Developer tại đây.