2026年11月12日
2026年11月12日
WordPress Meta Box 不显示的解决方法:显示选项、add_meta_box、区块编辑器
本文是日语原文的本地化版本。 阅读日语原文
前言
插件添加的 Meta Box(元框)没有出现在文章编辑页面,以前能看到的 Meta Box 突然消失了,切换到区块编辑器后侧边栏的 Meta Box 不见了。Meta Box 不显示,与显示选项设置以及和区块编辑器的兼容性有关。
症状与原因
Meta Box 不显示的主要原因:
- 在显示选项中被隐藏:每个用户各自的显示设置被设为“隐藏”
- 与区块编辑器不兼容:需要设置
__block_editor_compatible_meta_box - 钩子优先级问题:
add_meta_boxes钩子的执行时机不对 - 文章类型指定错误:第 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', // 回调函数
['post', 'page'], // 文章类型(可用数组指定多个)
'normal', // 上下文: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
区块编辑器(Gutenberg)对 Meta Box 的支持有限。
// 让区块编辑器中也显示 Meta Box
add_action('add_meta_boxes', function() {
add_meta_box(
'my_meta_box_id',
'自定义信息',
'render_my_meta_box',
'post',
'normal',
'high',
// 明确声明兼容区块编辑器
['__block_editor_compatible_meta_box' => true]
);
});
步骤4:禁用区块编辑器来确认
// functions.php — 对特定文章类型禁用区块编辑器
add_filter('use_block_editor_for_post_type', function($use_block_editor, $post_type) {
if ($post_type === 'post') {
return false; // 切换为经典编辑器
}
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)中。
// 重置特定用户的 Meta Box 显示设置
delete_user_meta(get_current_user_id(), 'metaboxhidden_post');
delete_user_meta(get_current_user_id(), 'metaboxhidden_page');
注意事项
- 显示选项的设置是按用户分别保存的。其他用户需要各自单独设置。
- 在区块编辑器中,只有
side上下文的 Meta Box 才会显示在侧边栏中。 - 使用 ACF(Advanced Custom Fields)时,需要进行支持区块编辑器的字段组设置。
总结
Meta Box 不显示时,请先检查“显示选项”中的勾选情况。在区块编辑器中,需要设置 __block_editor_compatible_meta_box。如果仍然无法解决,就逐一排查插件冲突。相关文章:自定义字段无法保存时的处理、区块编辑器崩溃时的处理
关于 WordPress 有疑问?本站运营方位于日本,仅以日语回复。 联系我们(日语)