我正在使用WordPress Plugin Boilerplate by DevinVinson.
我正在为wich添加一个公共快捷码函数,我需要一些资源(js和css),我只想在必要时将脚本(放在页脚中)排队,所以我需要在返回快捷码之前将脚本排队。
幸亏Fayaz answer 我解决了主要问题,但仍有一个小问题:我无法将$this->plugin\\u name传递给shortcode函数,我需要在wp_enqueue_script
作用
正如样板提供的add_action
钩住define_public_hooks
函数,我确实使用了它,并在其中嵌套了add\\u shortcode挂钩,如下所示:
class My_Plugin {
$plugin_public = new My_Plugin_Public( $this->get_plugin_name(), $this->get_version() );
$this->loader->add_action( \'init\', $plugin_public, \'my_plugin_ajax_register_shortcode\' );
}
然后在
my-plugin-public.php
文件:
class My_Plugin_Public {
public function __construct( $plugin_name, $version ) {
$this->plugin_name = $plugin_name;
$this->version = $version;
}
public function my_plugin_ajax_register_shortcode(){
function the_actual_shortcode($atts){
$content = \'shortcode content\';
wp_enqueue_script( $this->plugin_name.\'_google_maps_api\' ); // we don\'t know what $this->plugin_name is!
return $content;
}
add_shortcode(\'my_shortcode\', the_actual_shortcode);
}
}
正如你所想象的
the_actual_shortcode
函数,忽略
$this->plugin_name
, 我怎样才能通过呢?
最合适的回答,由SO网友:Fayaz 整理而成
有多种方法可以实现这一点。我向您展示的方法不会从根本上改变您的做法:
先进的My_Plugin
类别:
class My_Plugin {
// ...
private function define_public_hooks() {
$plugin_public = new My_Plugin_Public( $this->get_plugin_name(), $this->get_version() );
$this->loader->add_action( \'init\', $plugin_public, \'init\' );
// ...
}
// ...
}
然后在
My_Plugin_Public
类,创建一个名为
init
. 在这里,你可以做你想做的事情
init
触发动作挂钩。因此,添加短代码将进入
init
方法:
class My_Plugin_Public {
public function __construct( $plugin_name, $version ) {
$this->plugin_name = $plugin_name;
$this->version = $version;
}
public function init() {
add_shortcode( \'my_shortcode\', array( $this, \'my_plugin_ajax_register_shortcode\' ) );
}
public function my_plugin_ajax_register_shortcode( $atts ) {
$content = \'shortcode content\';
wp_enqueue_script( $this->plugin_name . \'_google_maps_api\' );
return $content;
}
}
因此,基本上不是在类方法中创建内部函数
my_plugin_ajax_register_shortcode
, 我们正在使用另一种名为
init
在班级内。现在我们可以访问
$this->plugin_name
在shortcode处理程序函数中,因为现在它在
My_Plugin_Public
班