如何在另一个静态函数中调用Add_action()中的静态函数?

时间:2017-10-09 作者:J.BizMai

在我的插件中,我只想在前端当前页面使用我的插件短代码时加载css。

我所有的短代码都是扩展短代码类的类。Shortcode类帮助我自动化回调函数。

Shortcode abstract class

namespace PluginFoo\\Shortcodes;


abstract class Shortcode {

    public $tag;
    public $attrs;
    public $function;

    public function __construct($tag) {
        $this->attrs = array();
        $this->tag = $tag;
        $this->function = static::className().\'::getCallBack\';

        add_shortcode( $this->tag, $this->function );

    }

    abstract public static function className();

    abstract public static function getCallBack( $attrs ); 
}

FooShortcode class

namespace PluginFoo\\Shortcodes;

class FooShortcode extends Shortcode {

    public static function getCallBack( $attrs = null ){

        add_action(\'wp_enqueue_scripts\', array( __CLASS__, \'set_bootstrap\' ) ); // <-- Here - function set_bootstrap not called !

        $output = \'\';

        ob_start();

        //HTML Template
         include_once \'shortcode-view.php\';

        $output .= ob_get_contents();
        ob_end_clean();

        return $output;

    }

    public static function set_bootstrap() {
         wp_enqueue_style( \'bootstrapstyle\', PLUGIN_DIR_URL . \'css/bootstrap.min.css\' );
    }

    public static function className(){
        return __CLASS__;
    }
}
如何在另一个静态函数中的add\\u action()中正确调用静态函数set\\u bootstrap()?

2 个回复
最合适的回答,由SO网友:David Lee 整理而成

如果类是静态调用的,则需要使用get_called_class() 像这样:

add_action(\'wp_enqueue_scripts\', array( get_called_class(), \'set_bootstrap\' ) );
$this 不可用。如果类被扩展,这也会起作用。

SO网友:Afshn

您可以使用classname::ClassExample:

add_shortcodes(callback::class, \'callbackmethod\');

结束