Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 插件中类方法中的add_操作在插件文件外部调用时不起作用_Php_Wordpress_Class_Plugins_Themes - Fatal编程技术网

Php 插件中类方法中的add_操作在插件文件外部调用时不起作用

Php 插件中类方法中的add_操作在插件文件外部调用时不起作用,php,wordpress,class,plugins,themes,Php,Wordpress,Class,Plugins,Themes,我有一个简单的类,它位于插件中自己目录下的一个文件中 该类只有一个目的,那就是使用remove\u action删除一些不需要的wordpress操作,它就像一个简单的包装器,用于许多remove\u action()函数调用 现在,问题是,当试图在类自己的文件之外实例化该类时。然后,所有的remove\u action()函数调用都不起作用,但仍然返回TRUE,如中所示,success。这是在尝试调试简单类时发现的 如果我实例化该类并在该类所在的同一文件中调用它的唯一函数,那么一切都会像一个符

我有一个简单的类,它位于插件中自己目录下的一个文件中

该类只有一个目的,那就是使用
remove\u action
删除一些不需要的wordpress操作,它就像一个简单的包装器,用于许多
remove\u action()
函数调用

现在,问题是,当试图在类自己的文件之外实例化该类时。然后,所有的
remove\u action()
函数调用都不起作用,但仍然返回
TRUE
,如中所示,success。这是在尝试调试简单类时发现的

如果我实例化该类并在该类所在的同一文件中调用它的唯一函数,那么一切都会像一个符咒一样工作。奇怪的可能只有我一个人,但我真的想在插件类的文件之外调用插件类方法,就像在主题文件中一样

有人在开发插件时遇到过这个问题吗

<?php
// removed the plugin stuff...

class WPStylesheetLoader
{
    public $styles = array();

    public function add($identifier, $url)
    {
        $this->styles[] = array('identifier' => $identifier, 'url' => $url);
    }

    public function enqueueAll()
    {
        foreach($this->styles as $style)
        {
            wp_enqueue_style($style['identifier'], $style['url']);
        }
    }

    public function activate() {
        echo add_action('get_header', array(&$this, 'enqueueAll'));
    }
}

$stylesheet = new WPStylesheetLoader;
$stylesheet->add('normalize', get_bloginfo('template_url') . '/css/normalize.css');
$stylesheet->add('style', get_bloginfo('stylesheet_url'));
$stylesheet->add('media-queries', get_bloginfo('template_url') . '/css/media-queries.css');
$stylesheet->activate();

一些错误和奇怪的事情:

  • echo add_action()
    不存在。只需
    add_action()

  • 打印排队样式和脚本的正确挂钩是
    wp\u enqueue\u scripts

  • 你正在做一个插件,但从一个主题加载样式

  • 主题
    style.css
    总是被加载的,你为什么排队
    get\u bloginfo('stylesheet\u url')

  • &$this
    是PHP4代码,请删除
    &

在下面的工作中,我添加了一个
\u构造
,以便注册插件的URL:

class WPStylesheetLoader
{
    public $styles = array();
    public $plugin_url;

    public function __construct()
    {
        $this->plugin_url = plugins_url( '/', __FILE__ );
    }

    public function add( $identifier, $url )
    {
        $this->styles[] = array(
            'identifier' => $identifier, 
            'url'        => $this->plugin_url . $url 
        );
    }

    public function enqueueAll()
    {
        foreach( $this->styles as $style )
            wp_enqueue_style( $style['identifier'], $style['url'] );
    }

    public function activate() 
    {
        add_action( 'wp_enqueue_scripts', array( $this, 'enqueueAll' ) );
    }
}

$stylesheet = new WPStylesheetLoader;
$stylesheet->add( 'normalize', 'css/normalize.css' );
$stylesheet->add( 'media-queries', 'css/media-queries.css' );
$stylesheet->activate();