METABOX
Khi bạn đăng nhập vào admin và bạn edit một bài viết nào đó thì các khối trong giao diện ta gọi là các Meta Boxes. Vậy Meta Boxes là các khối hiển thị dữ liệu cho phép người dùng chỉnh sửa và lưu lại trong trang quản lý bài viết của WordPress.
#Add
static function Metabox::add($id, $title, $callback, $args);
#Parameters
Parameter | Value | Description |
---|---|---|
$id | string | Là ID của meta box, ID này phải là duy nhất không trùng với các Meta Boxes khác. |
$title | string | Tiêu đề của Meta Box. |
$callback | string | Hàm callback dùng để hiển thị mã HTML nằm bên trong Meta Box |
$args | array |
Các tham số $module: Đối tượng mà Meta Box sẽ hiển thị, có thể là Page, Post, Category, Product hoặc là một custom post type $position: Thứ tự ưu tiên hiển thị giữa các Meta box. $content: Vị trí mà Meta Box sẽ hiển thị bên trên giao diện. Chúng ta có ba vị trí đó là tabs, leftTop, leftBottom và right. $content_box: Một mảng các tham số truyền vào Meta Box |
METADATA
Metadata cho phép bạn đưa các thông tin bổ sung vào một tài nguyên của website.
Metadata có thể được thêm vào:
- Page
- Category
- Post
- Gallery
#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:
static function Metadata::add($object_type, $object_id, $meta_key, $meta_value);
#Parameters
Parameter | Value | Description |
---|---|---|
$object_type | string | Tên đối tượng metadata. Ví dụ post, page, comment, term |
$object_id | int | Khóa ngoại tham chiếu đến table chính. (ID post, page ...) |
$meta_key | string | Key của Meta data |
$meta_value | string | Giá trị của Meta data |
#Get metadata
Hàm này dùng để lấy một metadata trong cơ sở dữ liệu
static function Metadata::get($object_type, $object_id = '', $meta_key = '', $single = false);
#Parameters
Parameter | Value | Description |
---|---|---|
$object_type | string | Tên đối tượng metadata. Ví dụ post, page, comment, term |
$object_id | int | Khóa ngoại tham chiếu đến table chính. (ID post, page ...) |
$meta_key | string | Key của Meta data |
$single | true|false (default false) | 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 đó, nếu meta_key không tồn tại sẽ tạo mới metadata
static function Metadata::update($object_type, $object_id, $meta_key, $meta_value);
#Parameters
Parameter | Value | Description |
---|---|---|
$object_type | string | Tên đối tượng metadata. Ví dụ post, page, comment, term |
$object_id | int | Khóa ngoại tham chiếu đến table chính. (ID post, page ...) |
$meta_key | string | Key của Meta data |
$meta_value | string | Giá trị của Meta data |
#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:
static function Metadata::delete($object_type, $object_id, $meta_key, $meta_value, $delete_all = false);
#Parameters
$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.
#Metadata object
Khi bạn thêm metadata bằng add_metadata hoặc update_metadat, khi xóa đối tượng (page, post ..) thì dữ liệu metadat sẽ không được tự động xóa kèm mà bạn phải viết lệnh hoặc xóa thủ công cho metadata đã thêm.
Để tự động hóa quá trình xóa metadata bạn có thể sử dụng các hàm metadata riêng biệt cho từng đối tượng
Adding metadata | Getting metadata | Updating metadata | Deleting metadata | |
---|---|---|---|---|
Category | add_category_meta | get_category_meta | update_category_meta | delete_category_meta |
Posts | add_post_meta | get_post_meta | update_post_meta | delete_post_meta |
Gallery | add_gallery_meta | get_gallery_meta | update_gallery_meta | delete_gallery_meta |
Users | add_user_meta | get_user_meta | update_user_meta | delete_user_meta |
Page | chưa hỗ trợ | chưa hỗ trợ | chưa hỗ trợ | chưa hỗ trợ |
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í dụ
class AddMetaBox
{
static function videoForm($object): void
{
$url = (have_posts($object)) ? Posts::getMeta($object->id, 'videoUrl', true) : '';
$Form = new FormBuilder();
$Form
->add('videoUrl', 'text', ['label' => 'Url video youtube'], $url)
->html(false);
}
/**
* saveMetaBox - Lưu dữ liệu vào metadata
*/
static function saveMetaBox($id, $module): void
{
if ($module == 'post' && Admin::getPostType() == 'post') {
$url = Request::Post('videoUrl');
Posts::updateMeta($id, 'videoUrl', $url);
}
}
}
/**
* Đăng ký MetaBox
* Tạo một ô MetaBox trong những bài viết có post type là post
* @videoBox: là key của ô MetaBox
* @Url_youtube: là tiêu đề của ô MetaBox
* @AddMetaBox::urlForm : function sẽ hiển thị
* @module: nơi MetaBox được tạo
* - products: sản phẩm
* - page: trang nội dung
* - post_{POST_TYPE}: bài viết có post type là POST_TYPE
*/
Metabox::add('videoBox', 'Url youtube', 'AddMetaBox::videoForm', ['module' => 'post_post']);
add_action('save_object', 'AddMetaBox::saveMetaBox', 10, 2);