Hiểu và sử dụng Post meta (Custom fields) trong WordPress

15/02/2014

WordPresss mặc định mang lại cho chúng ta 2 kiểu viết nội dung đó là Posts và Pages. Với 2 kiểu này, chúng ta có thể thỏa thích viết nội dung thông qua các trình soạn thảo (editor). Nhưng có một tính năng được tích hợp trong 2 kiểu này mà ít người thường sử dụng, mặc dù nó được WordPress hỗ trợ, đó là Post Meta.

wp_meta-boxes

Post meta (cũng thường được biết như là Custom fields) là một tính năng mà WordPress cho phép chúng ta thêm các thuộc tính khác cho nội dung bài viết. Để dễ hiểu hơn về post meta, trước tiên chúng ta sẽ cùng tìm hiểu cách chèn post meta vào trong mỗi bài viết theo kiểu Posts và Pages.

Kích hoạt Post meta từ WordPress admin

Mặc định thì post meta sẽ không hiển thị ngay ở phần nhập nội dung, để bật tính năng này, các bạn click vào Screen Options (nằm ở phần đầu trong phần admin) rồi sau đó đánh dấu chọn lựa vào mục Custom Fields.

wordpress-post-meta-01

Ngay khi bạn bật tính năng post meta từ screen options , bạn sẽ thấy ngay một mục Custom Fields nằm ngay bên dưới trình soạn thảo ghi nội dung bài viết.

wordpress-post-meta-02

Ban đầu các bạn sẽ thấy một danh sách các post meta keys mà các bạn đã nhập trước đó, nếu các bạn muốn tạo mới thì nhấp vào link Enter new. Giả sử các bạn cần nhập thêm cho bài viết thêm một trường mới là Price và giá trị là $450 thì các bạn nhập như sau :

wordpress-post-meta-03

Và khi bạn nhấn nút Publish thì trường này sẽ gắn liền với bài viết đó.

Sử dụng post meta trong Theme

Bây giờ nếu các bạn xem bài viết đó ở bên ngoài (front end) thì thấy vẫn chỉ có nội dung bài viết, còn trường Price mà chúng ta vừa thêm vào vẫn không thấy ở đâu. Và để nó có thể hiển ra theo bài viết đó, thì chúng ta cần chỉnh sửa code một chút trong theme như sau :

$price = get_post_meta(get_the_ID(), 'Price', true);
echo 'Cost of the item : '.$price;

Các bạn chỉ việc copy đoạn code bên trên và dán vào bất kì file nào trong theme mà các bạn muốn hiển thị trường Price. Giả sử các bạn past nó vào file single.php  thì nó sẽ hiển thị như sau :

wordpress-post-meta-04

Chèn Post meta qua code

Ngoài việc update post meta bằng tay trong admin, chúng ta còn có thể tự động cập nhật giá trị cho các post meta thông qua code. Quay lại ví dụ trên, giả sử chúng ta cần tự động cập nhật giá trị meta Discount mỗi khi giá trị meta Price lớn hơn $400 thì chúng ta cần chèn đoạn code sau vào file function.php như sau :

add_action( 'save_post', 'add_discount_meta' );

function add_discount_meta( $post_id )
{

        $price = get_post_meta($post_id, 'Price', true);
        if(strlen($price) > 0)
        {
            $discount = '0%';
            if(intval(str_replace("$","",$price)) > 400 )
               $discount = '15%';

             update_post_meta( $post_id, 'Discount', $discount );
        }

}

Trong đoạn code trên, mỗi khi chúng ta nhập giá trị Price lớn hơn $400 thì tự động giá trị Discount sẽ là 15%.

wordpress-post-meta-05

Post meta và Custom post type

Post meta là một tính năng hữu ích , chính vì thế mà nó cũng được hỗ trợ cho các Custom post type, tuy nhiên để sử dụng được tính năng này thì các bạn cần phải thêm nó vào trong tham số supports của hàm register_post_type như sau :

register_post_type( 'Mobiles',
        array(
            'labels' => array(
                'name' => __( 'Mobiles' ),
                'singular_name' => __( 'Mobile' )
            ),
        'public' => true,
        'has_archive' => true,
        'supports' => array(
        'title',
        'editor',
        'custom-fields',
        )
        )
    );

Tự động chèn Custom Field khi post hoặc page được đăng (published)
Khi bạn cần chèn giá trị custom field mặc định vào mỗi khì bài viết được đăng thì chỉ cần copy đoạn code sau và dán vào file funtions.php. Nhớ đổi giá trị  FIELD_NAMECUSTOM VALUE phù hợp với giá trị của các bạn nhé.

add_action('publish_page', 'add_custom_field_automatically');
add_action('publish_post'. 'add_custom_field_automatically');
function add_custom_field_automatically($post_ID) {
    global $wpdb;
    if(!wp_is_post_revision($post_ID)) {
        add_post_meta($post_ID, 'FIELD_NAME', 'CUSTOM VALUE', true);
    }
}

Mình mong là những lời giải thích cũng như câu chữ trong bài viết này sẽ giúp các bạn hiểu và sử dụng Post meta cho các mục đích của mình, nếu có gì khó hiểu, các bạn đừng ngần ngại để lại lời nhắn dưới dạng comments nhé. Mình sẽ giúp các bạn hiểu rõ hơn về post meta.

Chuyên Mục:

Bài viết được đăng bởi webmaster

Nếu các bạn thấy bài viết hữu ích thì giúp mình Like cái nhé !