构建了第二个插件,但它覆盖了第一个插件

时间:2019-02-06 作者:Brad Ahrens

我构建了一个WordPress插件Alessandro Castellani\'s 没有问题的教程。

然而,当我构建第二个插件并激活它时,由于某种原因,它会覆盖第一个插件。在侧栏中,我得到了同一(第二个)插件的两个链接,而第一个没有出现。即使我停用了第一个插件,第二个插件也会显示为double。

Desired Behaviour:这两个插件作为单独的单元工作。

Current Behaviour:它们似乎相互重叠,并从对方处获取设置,第二个从侧边栏中删除第一个设置。出现的是第二个插件两次。

我对插件有一个不同的名称,并在整个过程中引用此名称

/**
 * @package PluginNumberTwo
 */
问题是否可能是因为BaseController中的构造函数几乎相同?

第一个插件:

namespace Inc\\Base;

class BaseController
{


    public $plugin_path;
    public $plugin_url;
    public $plugin;

    public function __construct(){
        $this->plugin_path = plugin_dir_path( dirname( __DIR__ ) );
        $this->plugin_url = plugin_dir_url( dirname( __DIR__ ) );
        $this->plugin = plugin_basename(dirname(dirname(__DIR__))) .\'/first-plugin.php\';
    ...
    }
}
第二个插件:

namespace Inc\\Base;

class BaseController
{
    public $plugin_path;
    public $plugin_url;
    public $plugin;

    public function __construct(){
        $this->plugin_path = plugin_dir_path( dirname( __DIR__ ) );
        $this->plugin_url = plugin_dir_url( dirname( __DIR__ ) );
        $this->plugin = plugin_basename(dirname(dirname(__DIR__))) .\'/second-plugin.php\';
    ...
    }
}
一个潜在的问题是,一些函数具有相同的名称。

public function register()
public function addPages( array $pages )
public function addAdminMenu()
public function setSettings( array $settings )
public function setSections( array $sections )
public function setFields( array $fields )
public function registerCustomFields()
这可能会导致问题吗?

此外,以下是每个插件文件开头的注释:

第一个插件:

<?php
/**
 * @package FirstPlugin
 */
/*
    Plugin Name: FirstPlugin
    Plugin URI: https://example.com
    Description: This is the first plugin.
    Version: 1.0.0
    Author: First Lastname
    Author URI: http://www.example.com
*/
第二个插件:

<?php
/**
* @package SecongPlugin
*/
/*
    Plugin Name: SecondPlugin
    Plugin URI: https://example.com
    Description: This is the second plugin
    Version: 1.0.1
    Author: Brad Ahrens
    Author URI: http://www.example.com
*/
文件名完全相同(除了主文件夹名和初始的first-plugin.php/second-plugin.php文件)。

1 个回复
最合适的回答,由SO网友:Krzysiek Dróżdż 整理而成

好吧,那么。。。

函数是否相同或__construct 方法几乎是相同的-所有这些函数都不是全局的-它们是类方法-因此它们可以是相同的。

问题出在其他地方。。。

在这两个插件中,您在同一命名空间中声明了一个名称相同的类。。。所以这些类相互冲突。

类名应该是唯一的,所以使用BaseController作为类名是一个非常糟糕的主意。

Notice更改这些类的名称后,还记得在初始化部分更改名称。

在插件的某个地方,您有如下内容:

new BaseController();
您必须更改它,以便初始化正确的类。