Metabox là gì?
Metabox là khối giao diện xuất hiện trong trang chỉnh sửa bài viết của WordPress. Nó cho phép nhập hoặc chỉnh sửa dữ liệu bổ sung, dữ liệu này sẽ được lưu trong postmeta và gắn liền với bài viết.
Khi nào nên dùng metabox
- Khi cần thêm trường thông tin riêng cho một loại nội dung (ví dụ: Manga có “status”, “artist”).
- Khi muốn quản lý dữ liệu dưới dạng cấu trúc, thay vì chèn trực tiếp vào nội dung.
- Khi không muốn cài thêm plugin bên ngoài như ACF hoặc Meta Box để giữ hệ thống nhẹ.
Cách tạo metabox cơ bản
<?php
// Đăng ký metabox
add_action('add_meta_boxes', function() {
add_meta_box(
'manga_info', // ID
__('Manga Info', 'init-manga'), // Title
'render_manga_metabox', // Callback
'manga', // Post type
'normal', // Context
'default' // Priority
);
});
// Render metabox UI
function render_manga_metabox($post) {
$status = get_post_meta($post->ID, 'status', true);
?>
<p>
<label for="manga_status">Trạng thái:</label>
<select name="manga_status" id="manga_status">
<option value="ongoing" <?php selected($status, 'ongoing'); ?>>Đang ra</option>
<option value="completed" <?php selected($status, 'completed'); ?>>Hoàn thành</option>
</select>
</p>
<?php
}
// Lưu dữ liệu metabox
add_action('save_post_manga', function($post_id) {
if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return;
if (!current_user_can('edit_post', $post_id)) return;
if (isset($_POST['manga_status'])) {
update_post_meta($post_id, 'status', sanitize_text_field($_POST['manga_status']));
}
});
?>
Cách lấy dữ liệu metabox trong theme
Sau khi lưu, dữ liệu nằm trong bảng wp_postmeta. Có thể lấy ra bằng get_post_meta():
<?php
$status = get_post_meta(get_the_ID(), 'status', true);
if ($status === 'completed') {
echo '<span class="badge badge-success">Trọn bộ</span>';
}
?>
Lưu ý khi làm việc với metabox
- Luôn kiểm tra quyền người dùng (
current_user_can). - Sử dụng
sanitize_text_fieldhoặc các hàm sanitize phù hợp để bảo mật. - Dùng
wp_nonce_fieldnếu metabox quan trọng, để tránh CSRF. - Đặt tên key meta ngắn gọn, rõ ràng, nhất quán.
Kết luận
Metabox là công cụ mạnh mẽ để mở rộng WordPress mà không cần plugin ngoài. Việc tự viết metabox giúp kiểm soát tốt hơn dữ liệu và giữ site nhẹ. Với Custom Post Type như “manga”, metabox đặc biệt hữu ích để quản lý thông tin riêng như tình trạng, tác giả, số chương.
Bình luận