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 ไหม ผู้เผยแพร่เว็บไซต์นี้อยู่ที่ญี่ปุ่นและตอบเป็นภาษาญี่ปุ่น ติดต่อ (ภาษาญี่ปุ่น)