Metabox trong WordPress: Hướng dẫn đầy đủ và ví dụ thực tế

Metabox trong WordPress là thành phần quen thuộc giúp thêm các trường nhập liệu tùy chỉnh cho post, page hoặc custom post type. Bài viết này trình bày khái niệm, cách tạo metabox, lưu dữ liệu vào post meta và ví dụ thực tế.

Metabox trong WordPress: Hướng dẫn đầy đủ và ví dụ thực tế

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_field hoặc các hàm sanitize phù hợp để bảo mật.
  • Dùng wp_nonce_field nế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


  • Không có bình luận.

Init Toolbox

Nhấn Ctrl + \ trên máy tính, hoặc vuốt sang trái ở bất kỳ đâu trên mobile.

Đăng nhập





Đang tải...