You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修复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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 16:55:46