2026年11月12日

2026年11月12日

แก้ปัญหา Meta Box ไม่แสดงในหน้าแก้ไขเรื่องของ WordPress

บทความนี้เป็นฉบับปรับให้เหมาะกับท้องถิ่นจากต้นฉบับภาษาญี่ปุ่น อ่านต้นฉบับภาษาญี่ปุ่น

บทนำ

meta box ที่เพิ่มด้วยปลั๊กอินไม่แสดงในหน้าแก้ไขเรื่อง meta box ที่เคยเห็นอยู่หายไปกะทันหัน หรือพอเปลี่ยนไปใช้ block editor แล้ว meta box ในแถบด้านข้างก็ไม่ขึ้น การที่ meta box ไม่แสดงเกี่ยวข้องกับการตั้งค่าหน้าจอและความเข้ากันได้กับ block editor

อาการและสาเหตุ

สาเหตุหลักที่ meta box ไม่แสดง:

  • ถูกซ่อนไว้ในตัวเลือกหน้าจอ: การตั้งค่าการแสดงผลของผู้ใช้แต่ละคนเป็น "ซ่อน"
  • ไม่เข้ากันกับ block editor: ต้องตั้งค่า __block_editor_compatible_meta_box
  • ปัญหาลำดับความสำคัญของฮุก: จังหวะของฮุก add_meta_boxes ไม่ตรงกัน
  • ระบุชนิดของเรื่องผิด: ชนิดของเรื่อง (post type) ในอาร์กิวเมนต์ที่ 3 ผิด
  • ปลั๊กอินขัดแย้งกัน: ปลั๊กอินอื่นลบ meta box ออก

ขั้นตอนการแก้ไข

ขั้นตอนที่ 1: ตรวจสอบตัวเลือกหน้าจอ

สาเหตุที่พบบ่อยที่สุดคือการตั้งให้ซ่อนในตัวเลือกหน้าจอ

1. คลิก "ตัวเลือกหน้าจอ (Screen Options)" ที่มุมขวาบนของหน้าแก้ไขเรื่อง

2. ตรวจสอบว่า meta box ที่ต้องการแสดงไม่ได้ถูกเอาเครื่องหมายถูกออก

3. ติ๊กเลือกแล้วปิด ก็จะแสดงขึ้นมา

ขั้นตอนที่ 2: ตรวจสอบการเขียน add_meta_box

// functions.php — เพิ่ม meta box อย่างถูกต้อง
add_action('add_meta_boxes', function() {
    add_meta_box(
        'my_meta_box_id',       // ID (สตริงที่ไม่ซ้ำกัน)
        'ข้อมูลกำหนดเอง',           // ชื่อ
        'render_my_meta_box',   // ฟังก์ชัน callback
        ['post', 'page'],       // ชนิดของเรื่อง (ระบุหลายชนิดเป็นอาร์เรย์ได้)
        'normal',               // context: normal/side/advanced
        'high'                  // ลำดับความสำคัญ: high/core/default/low
    );
});

function render_my_meta_box($post) {
    wp_nonce_field('my_meta_nonce_action', 'my_meta_nonce');
    $value = get_post_meta($post->ID, '_my_field', true);
    echo '<input type="text" name="my_field" value="' . esc_attr($value) . '">';
}

ขั้นตอนที่ 3: แสดง meta box ใน block editor

block editor (Gutenberg) รองรับ meta box อย่างจำกัด

// แสดง meta box ใน block editor ด้วย
add_action('add_meta_boxes', function() {
    add_meta_box(
        'my_meta_box_id',
        'ข้อมูลกำหนดเอง',
        'render_my_meta_box',
        'post',
        'normal',
        'high',
        // ระบุว่าเข้ากันได้กับ block editor
        ['__block_editor_compatible_meta_box' => true]
    );
});

ขั้นตอนที่ 4: ปิด block editor เพื่อตรวจสอบ

// functions.php — ปิด block editor เฉพาะชนิดของเรื่องที่กำหนด
add_filter('use_block_editor_for_post_type', function($use_block_editor, $post_type) {
    if ($post_type === 'post') {
        return false;  // สลับไปใช้ Classic Editor
    }
    return $use_block_editor;
}, 10, 2);

หรืออีกวิธีคือติดตั้งปลั๊กอิน "Classic Editor" แล้วตั้งค่าจากหน้าผู้ดูแล

ขั้นตอนที่ 5: ดีบักการแสดงผลของ meta box

// ตรวจสอบว่า meta box ถูกลงทะเบียนอยู่หรือไม่
add_action('add_meta_boxes', function() {
    global $wp_meta_boxes;
    error_log('Meta boxes: ' . print_r(array_keys($wp_meta_boxes), true));
}, 999);  // รันเป็นลำดับสุดท้ายด้วยลำดับความสำคัญ 999

ขั้นตอนที่ 6: ตรวจสอบปลั๊กอินที่ขัดแย้งกัน

# ปิดใช้งานปลั๊กอินทั้งหมดด้วย WP-CLI แล้วตรวจ meta box
wp plugin deactivate --all
# เปิดหน้าแก้ไขเรื่องในเบราว์เซอร์ แล้วดูว่า meta box ขึ้นหรือไม่
# หากไม่มีปัญหา ให้เปิดใช้งานปลั๊กอินทีละตัวเพื่อหาตัวที่เป็นสาเหตุ
wp plugin activate plugin-name

ขั้นตอนที่ 7: รีเซ็ต user meta

การตั้งค่าในตัวเลือกหน้าจอถูกเก็บไว้ใน user meta

// รีเซ็ตการตั้งค่าการแสดง meta box ของผู้ใช้ที่กำหนด
delete_user_meta(get_current_user_id(), 'metaboxhidden_post');
delete_user_meta(get_current_user_id(), 'metaboxhidden_page');

ข้อควรระวัง

  • การตั้งค่าในตัวเลือกหน้าจอถูกบันทึกแยกตามผู้ใช้ ผู้ใช้คนอื่นต้องตั้งค่าแยกต่างหาก
  • ใน block editor จะแสดงเฉพาะ meta box ที่อยู่ใน context side ในแถบด้านข้าง
  • หากใช้ ACF (Advanced Custom Fields) ต้องตั้งค่ากลุ่มฟิลด์ให้รองรับ block editor

สรุป

หาก meta box ไม่แสดง ให้ตรวจเครื่องหมายถูกใน "ตัวเลือกหน้าจอ (Screen Options)" ก่อน ใน block editor ต้องตั้งค่า __block_editor_compatible_meta_box หากยังไม่หาย ให้แยกแยะว่าเป็นปลั๊กอินขัดแย้งกันหรือไม่ บทความที่เกี่ยวข้อง: เมื่อบันทึกฟิลด์กำหนดเองไม่ได้, เมื่อ block editor ล่ม

มีคำถามเกี่ยวกับ WordPress ไหม ผู้เผยแพร่เว็บไซต์นี้อยู่ที่ญี่ปุ่นและตอบเป็นภาษาญี่ปุ่น ติดต่อ (ภาษาญี่ปุ่น)

お気軽にご相談ください

お見積りへ お問い合わせへ
▲