PHP致命错误:调用未定义的函数plugin_basename

时间:2012-06-27 作者:whatsthebigidea

我收到此错误:[2012年6月27日18:22:39 UTC]PHP致命错误:在/XXXX/public\\u html/wp-content/plugins/price-update/price-update中调用未定义的函数plugin\\u basename()。php第68行:

            //We set the plugin basename here, could manually set it, but this is for demonstration purposes
            $this->plugin_basename = plugin_basename(__FILE__);
在这段代码中:

class PriceUpdate extends mtekk_admin
{
        protected $version = \'0.0.1\';
        protected $full_name = \'Price Update\';
        protected $short_name = \'Price Update\';
        protected $access_level = \'manage_options\';
        protected $identifier = \'pr_upate\';
        protected $unique_prefix = \'prud\';
        protected $plugin_basename = \'price-update/price-update.php\';
        protected $opt = array();
        /**
         * __construct()
         *
         * Class default constructor
         */
        function __construct()
        {
                //We set the plugin basename here, could manually set it, but this is for demonstration purposes
                $this->plugin_basename = plugin_basename(__FILE__);
                register_deactivation_hook(__FILE__, array($this, \'deactivate\'));
                add_action($this->unique_prefix . \'_cron_hook\', array($this,\'cron_handle\'));
                //Register some of our custom taxonomies
                add_action(\'init\', array($this, \'wp_init\'), 0);
                add_action(\'wp_footer\', array($this, \'footer\'));
                //We\'re going to make sure we load the parent\'s constructor
                parent::__construct();
        }
但是,其定义如下:

        protected $plugin_basename = \'price-update/price-update.php\';
有什么想法吗?

2 个回复
SO网友:Chris_O

plugin_basename 是一个WordPress函数,只需将目录传递给插件即可获得插件文件名

当你打电话时$this->plugin_basename PHP正在寻找在类中定义的函数plugin\\u basename。类==PHP中没有函数plugin\\u basename(),出现致命错误。

如果只想定义包含插件文件名的变量,请执行以下操作:

var $plugin_filename = plugin_basename( __FILE__);

SO网友:Michael Ecklund

也许你最好使用plugin_dir_path(__FILE__);?

Example:

<?php
define( \'MYPLUGINNAME_PATH\', plugin_dir_path(__FILE__) );
require MYPLUGINNAME_PATH . \'includes/class-metabox.php\';
require MYPLUGINNAME_PATH . \'includes/class-widget.php\';
?>
[编辑-2012年6月29日]

我相信您的PHP OOP逻辑不正确,但我可能错了。您正在定义child class 它扩展了parent class. 然后你打电话给parent constructor 内部child constructor.

您提供的代码显示您分配了子类属性$plugin_basename, 但之后你就什么都不做了。

我想你是想设置一个属性$plugin_basename 对于要处理的父类。但是,如果是这种情况,则需要在父类中定义属性,或者需要调用使用该属性的父方法$plugin_basename.

如果不是这样,那么您需要确保使用该属性$plugin_basename, 在子类中,之后是这样分配的:$this->child_class_method_name($this->plugin_basename);

您可以访问处理属性的父类方法$plugin_basename, 并将子类指定的属性传递给父类方法,如下所示:$this->parent_class_method_name($this->plugin_basename);

考虑到您提供的代码量很小,我不太确定您的插件是如何设置的。

如果你能提供更多关于你如何处理房产的想法$plugin_basename, 分配完之后,我可能会有更多的帮助。

结束

相关推荐

从非核心php文件访问BloInfo、Get_Option和plugins_url

我正在创建一个插件,插件目录中有一个php文件,可以通过自定义重写url直接访问该文件。我需要这个文件能够使用标题中提到的三个功能。目前,我正在包括wp负载。php文件,它使我能够访问所有这些函数。然而,我一直在读到不应该包括wp负载,因为它可能不总是在同一个位置,而且它包括可能不需要的wordpress文件。这就是我如何包含wp负载:$wp_base = explode($_SERVER[\'PHP_SELF\'], $_SERVER[\'SCRIPT_FILENAME\']); require