如何修复PHP8下自定义文章类型show_in_menu的‘Undefined array key’警告?
解决PHP8中自定义文章类型(CPT)未定义数组键警告的方法
PHP8开始对未定义数组键抛出严格警告,针对你代码里show_in_menu的问题,有几种简单的解决方式:
1. 给函数参数设置默认值
修改create_custom函数,用WordPress自带的wp_parse_args合并默认参数和用户传入的参数,确保show_in_menu始终有值:
function create_custom( $cpt = array() ) { // 预设默认参数,show_in_menu默认设为true,可根据需求调整 $default_args = array( 'show_in_menu' => true ); // 合并用户传入的参数与默认值,用户传的参数会覆盖默认值 $cpt = wp_parse_args( $cpt, $default_args ); register_post_type($cpt['post_type'], array( 'label' => __($cpt['label'], 'kbo'), 'description' => __($cpt['description'], 'kbo'), 'public' => true, 'show_ui' => true, 'show_in_menu' => $cpt['show_in_menu'], 'capability_type' => 'post', // 其他CPT参数... )); }
2. 直接在使用时做存在性判断
如果不想修改函数结构,也可以在调用$cpt['show_in_menu']时用PHP的空合并运算符快速处理,没有这个键就用默认值:
'show_in_menu' => $cpt['show_in_menu'] ?? true,
或者用传统的isset判断:
'show_in_menu' => isset($cpt['show_in_menu']) ? $cpt['show_in_menu'] : true,
默认值可以根据你的需求改成false,或者指定菜单位置的字符串(比如'tools.php')。
3. 确保所有函数调用都传入完整参数
检查所有调用create_custom的代码,保证每次调用都明确传入show_in_menu键,比如:
create_custom(array( 'post_type' => 'your_custom_post', 'label' => '自定义文章类型', 'description' => '这是我的自定义文章类型描述', 'show_in_menu' => true, // 其他必要参数... ));
这种方法适合你能掌控所有调用场景的情况,但如果调用次数多,前两种方法更高效。
内容的提问来源于stack exchange,提问作者mrcpk
相关产品推荐
相关产品推荐

