Ở bài trước chúng ta đã tìm hiểu về Custom Meta Boxes và mình cũng có
đề cập đến Metadata căn bản, chính vì quá căn bản nên trong bài
này mình sẽ tìm hiểu một số cách sử dụng nâng cao hơn.

WordPress sử dụng mô hình EAV nhằm giúp lập trình viên có
thể tùy biến theo từng dự án. Ví dụ bạn muốn tạo một website
bán hàng với các sản phẩm đầy đủ các thuộc tính như kích thước,
màu sắc thì bạn có thể sử dụng bảng meta để lưu trữ các thông
tin đó. Vấn đề này mình có nói rõ ở bài Meta Boxes rồi nên bạn
có thể quay lại tham khảo trước khi đọc bài này nhé.

1. Metadata API trong WordPress

Trong WordPress có nhiều table chứa bài viết, kèm theo mỗi
table như vậy chúng ta sẽ thấy một bảng metadata. Ví dụ chúng
ta có bảng commentmeta, postmeta,
termmeta, usermeta. Và để xử lý các
thao tác thêm, xóa, sửa các metadata thì WordPress cung cấp cho
chúng ta bốn hàm như sau:

Đây là bốn hàm xử lý chung chung và về cách sử dụng thì bạn có
thể click vào từng hàm để xem chi tiết kèm các ví dụ một cách
rõ ràng hơn, hoặc bạn cũng có thể xem phần giải thích dưới đây.

add_metadata()

Hàm này thêm một thông tin meta vào cơ sở dữ liệu,
cấu trúc của nó như sau:

add_metadata($meta_type, $object_id, $meta_key, $meta_value, $unique = false)

Trong đó:

  • $meta_type: Tên đối tượng metadata. Ví dụ
    post, page, comment, term
  • $object_id: Khóa ngoại tham chiếu đến table
    chính. Ví dụ cần lưu trữ thông tin của bài post có ID = 12
    thì lúc này giá trị của $object_id là 12.
  • $meta_key: Key của Meta data
  • $meta_value: Giá trị của Meta data
  • $unique: Nếu bằng true thì key
    $meta_key sẽ là duy nhất, ngược lại bạn có thể
    thêm nhiều field với $meta_key giống nhau.

delete_metadata()

Hàm này xóa một hoặc nhiều metas ra khỏi cơ sở dữ liệu, cấu
trúc như sau:

delete_metadata($meta_type, $object_id, $meta_key, $meta_value = '', $delete_all = false)

Trong đó các tham số truyền vào được giải thích như trong hàm
add_metadata(). Riêng tham số

  • $delete_all sẽ có giá trị true hoặc
    false, nếu true thì nó xóa hết tất cả các field
    có key trùng với $meta_key, ngược lại nó chỉ xóa
    field có key trùng với $meta_key và có object_id
    trùng với $object_id.
  • $meta_value nếu bạn thiết lập giá trị cho tham
    số này thì nó sẽ bổ sung thêm một điều kiện xóa đó là
    giá trị của key meta phải bằng với
    $meta_value.

get_metadata()

Hàm này dùng để lấy một metadata trong cơ sở dữ liệu, cấu trúc
của nó như sau:

get_metadata($meta_type, $object_id, $meta_key = '', $single = false)

Hai tham số đầu thì quá quen thuộc rồi, riêng tham
số $single sẽ quyết định kết quả trả về của
hàm này. Nếu $single = true thì nó sẽ trả về
giá trị của $meta_key, ngược lại nó sẽ trả về một
mảng chứa tất cả các thông tin của record đó.

update_metadata()

Hàm này cập nhật giá trị cho một meta key nào đó, cấu trúc như
sau:

update_metadata($meta_type, $object_id, $meta_key, $meta_value, $prev_value = '')

Giá trị của $prev_value sẽ bổ trợ cho tham
số $unique của hàm
add_metadata(), nghĩa là nếu bạn truyền một giá
trị vào $prev_value thì nó sẽ thêm một điều
kiện là chỉ cập nhật cho những record nào có meta value
bằng $prev_value.

2. Một số hàm bổ trợ Metadata API 

Nếu các bạn để ý kỹ thì tất cả bốn hàm trên đều có một tham số
truyền vào đó là $meta_type, điều này đôi khi
gây phiền hà đối với lập trình viên vì bắt buộc phải nhớ
tên của đối tượng cần cập nhật. Và để tường minh hơn thì đối
với mỗi đối tượng như vậy thì WordPress sẽ cung cấp thêm
bốn hàm riêng biệt.

  Adding metadata Getting metadata Updating metadata Deleting metadata
Posts add_post_meta() get_post_meta() update_post_meta() delete_post_meta()
Users add_user_meta() get_user_meta() update_user_meta() delete_user_meta()
Comments add_comment_meta() get_comment_meta() update_comment_meta() delete_comment_meta()
Term add_term_meta() get_term_meta() update_term_meta() delete_term_meta()
Parameters $post_id,
$meta_key,
$meta_value,
$unique (optional)
$post_id,
$meta_key,
$single (optional), 
$post_id,
$meta_key,
$meta_value,
$prev_value (optional)
$post_id,
$meta_key,
$meta_value (optional)

Thay vì sử dụng các hàm metadata và có truyền tham
số $meta_type thì bạn sử dụng các hàm
trên để bỏ qua tham số $meta_type.

Về danh sách các tham số truyền vào thì bạn sẽ suy ra từ hàm
chính của nó. Ví dụ hàm get_metadata() sẽ có
4 tham số truyền vào, trong đó tham số đầu tiên là
$meta_type và tham số này sẽ được loại
bỏ nên lúc này các hàm add_post_meta(),
add_user_meta(), add_comment_meta(),
add_term_meta() chỉ còn ba tham số còn
lại (bỏ đi tham số $meta_type).

Ví dụ:

// Hàm chính
add_metadata($meta_type, $object_id, $meta_key, $meta_value);

// Các hàm bổ trợ chỉ còn ba tham số $object_id, $meta_key, $meta_value
add_post_meta($post_id, $meta_key, $meta_value);
add_comment_meta($comment_id, $meta_key, $meta_value);
add_term_meta($term_id, $meta_key, $meta_value);
add_user_meta($user_id, $meta_key, $meta_value);

3. Lời kết

Bài này mình chỉ giới thiệu danh sách các hàm Metadata API
trong WordPress, đây là các API khá quan trọng bởi vì khi lập
trình WordPress bắt buộc các bạn phải biết để có thể tự mình
design ra những database phù hợp cho các dự án. Bài này mình
xin dừng tại đây, bài tiếp theo chúng ta sẽ vận dụng các API
này kết hợp với meta boxes để thêm dữ liệu cho các bài viết
trong WordPress.

Nguồn: freetuts.net

Leave a Reply

Your email address will not be published. Required fields are marked *