正在获取‘wp_enQueue_脚本’作用域中的实例变量

时间:2015-04-21 作者:Guerrilla

我需要一些帮助来了解如何将实例变量传递给钩子。

我正在动态读取模板中所需的CSS文件,并将其存储在$settings 对象,我将其保留在插件命名空间的范围内。

所以我想这样做:

add_action( \'wp_enqueue_scripts\',function() {
    \\mynamespace\\ScriptQueuer::QueueCss($settings->GetCss());
} );
但显然我需要通过$settings->GetCss() 以某种方式将值返回到范围中。

我是否$settings 对象是否全局?我不确定如何做到这一点,也不确定这是最好的方法。是否有任何方法可以实现这一点,或者我必须在静态函数中硬编码所有CSS文件?

1 个回复
最合适的回答,由SO网友:fuxia 整理而成

解决这个问题的最佳方法是简化代码。马上ScriptQueuer::QueueCss() 只是一个静态方法,获取数据太晚了。

您可以使用一个不可变对象,然后将其方法之一注册为回调。

示例:

class Enqueuer {

    private $stylesheets;

    public function __construct( ArrayObject $stylesheets ) {

        $this->stylesheets = $stylesheets;
    }

    public function enqueue() {

        foreach ( $this->stylesheets as $stylesheet )
            wp_enqueue_script(
                $stylesheet->handle(),
                $stylesheet->url(),
                $stylesheet->dependencies(),
                $stylesheet->version(),
                $stylesheet->in_footer()
            );
    }
}

add_action( \'wp_enqueue_scripts\', [
    new Enqueuer( $settings->GetCss() ),
    \'enqueue\'
] );
无需向enqueue方法传递数据,无需闭包,代码易于阅读。

结束

相关推荐

如何将POST_ROW_ACTIONS()与自定义操作函数链接

我在下面定义了一个自定义帖子类型,我想添加一个自定义行操作,以允许我通过管理面板“更新”帖子class LeagueCpt { function __construct() { add_action( \'init\', array(&$this,\'registerLeagueCPT\')); add_filter(\'post_row_actions\', array(&$this,\'post_r