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

WordPress中Cannot redeclare function错误的解决请求

解决PHP Cannot redeclare wpb_dynamic_init()错误

问题原因

出现致命错误的核心原因是:两个插件各自包含了一份SDK的start.php文件,而该文件内的wpb_dynamic_init()全局函数没有做重复声明检查。当第二个插件加载时,这个函数已经被第一个插件定义过,PHP不允许全局函数重复声明,因此抛出错误。Logger类的单例设计仅解决了类实例重复创建的问题,无法覆盖全局函数重复声明的场景。

解决方法

方案1:给全局函数添加存在性检查(最快修复)

直接修改SDK的start.php文件,在声明函数前先检查是否已存在:

require_once dirname(__FILE__) . '/require.php';

// 先检查函数是否已定义,避免重复声明
if ( ! function_exists( 'wpb_dynamic_init' ) ) {
    function wpb_dynamic_init($module)
    {
        $wpb = Logger::instance($module['id'], $module['slug'], true);
        // $wpb->dynamic_init($module);
        return $wpb;
    }
}

这样无论多少个插件包含该文件,函数只会被声明一次。

方案2:优化插件中的SDK加载逻辑

在每个插件加载SDK前,先检查核心函数是否已存在,避免重复包含start.php:
以插件一为例,修改后的代码如下(插件二做同样调整):

if ( ! function_exists( 'stp_wpb' ) ) {
    // Create a helper function for easy SDK access.
    function stp_wpb() {
        global $stp_wpb;

        if ( ! isset( $stp_wpb ) ) {
            // 先检查SDK核心函数是否已加载
            if ( ! function_exists( 'wpb_dynamic_init' ) ) {
                require_once dirname(__FILE__) . '/wpb-sdk/start.php';
            }
            $stp_wpb = wpb_dynamic_init( array(
                    'id'    => 10,
                    'slug' => 'sdk-test-plugin',
                    'type' => 'plugin',
                    'public_key' => '7e240de74fb1ed08fa08d38063f6a691462a815',
                    'is_premium' => false,
                    'has_addons' => false,
                    'has_paid_plans' => false,
                    'menu' => array()
                ) );
        }

        return $stp_wpb;
    }

    // Init .
    stp_wpb();
    // Signal that SDK was initiated.
    do_action( 'stp_wpb_loaded' );
}

该方案减少了不必要的文件包含操作,同时避免函数重复声明。

方案3:将SDK独立为公共依赖(长期维护最优)

把SDK单独打包成一个WordPress插件或Composer包,让两个业务插件都依赖这个公共SDK。这样所有插件共用一份SDK代码,从根源上解决重复代码和重复声明的问题:

  • 将SDK代码独立为一个WordPress插件
  • 在业务插件中先检查公共SDK是否激活,再调用其函数
  • 可添加依赖检查逻辑,提示用户先安装激活SDK插件

内容的提问来源于stack exchange,提问作者ahmedwp

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 02:50:29