这件事让我很困惑。我在plugin类中使用add\\u操作来完成某些事情-添加脚本(&U);标题样式、wp\\U ajax等。以下是\\uu构造中的操作:
function __construct(){
add_action(\'admin_menu\', array($this, \'sph_admin_menu\'));
add_action(\'sph_header\', array($this, \'sph_callback\'));
add_action(\'sph_header_items\', array($this, \'sph_default_menu\'), 1);
add_action(\'sph_header_items\', array($this, \'sph_searchform\'), 2);
add_action(\'sph_header_items\', array($this, \'sph_social\'), 3);
//Below here they don\'t work. I have to call these outside of the class (but I need class variables within the functions)
add_action(\'wp_print_styles\', array(&$this, \'sph_stylesheets\'));
add_action(\'wp_print_scripts\', array(&$this, \'sph_scripts\'));
add_action( \'wp_ajax_nopriv_add_to_list\', array(&$this, \'le_add_to_list\'));
add_action( \'wp_ajax_add_to_list\', array(&$this, \'le_add_to_list\'));
add_action(\'init\', array(&$this, \'register_menu\'));
}
有人遇到过这样的事情吗?我真的很想知道如何在一个类内使用所说的钩子——在类外进行操作太麻烦了!
SO网友:Michael Ecklund
有时某些钩子需要在特定时间发射。例如,需要对一些挂钩进行激发init.
将此添加到__construct()
add_action(\'init\', array(&$this, \'init\'));
然后添加此函数,该函数将包含需要激发的所有挂钩
init.
public function init(){
add_action(\'hook_name\', array(&$this, \'your_method_name\'));
add_action(\'hook_name\', array(&$this, \'your_method_name\'));
add_action(\'hook_name\', array(&$this, \'your_method_name\'));
add_action(\'hook_name\', array(&$this, \'your_method_name\'));
}
另一个例子:
add_action( \'init\', function () {
add_action( \'hook_name\', \'function_name\', 10, 3 );
add_action( \'hook_name\', __NAMESPACE__ . \'\\namespaced_function_name\', 10 );
add_action( \'hook_name\', \'\\specific\\namespace\\function_name\', 5 );
}, 1 );
你会想了解钩子以及它们何时被触发。所以你知道何时何地触发你的行动。
Plugin API/Action Reference
SO网友:Jake
这是一个很老的问题,但如果有人在寻找答案,我也有类似的问题。我上了一节课
class Plugin{
function __construct(){
add_action(\'init\', array(&$this, \'init\'));
}
function init(){
// code...
}
}
插件::init()从未被调用。然后我意识到了我的错误。要实例化我正在执行的类,请执行以下操作:
if(class_exists(\'Plugin\')){
add_action("init", "plugin_init");
function socialsports_init() {
global $plugin;
$plugin = new Plugin;
}
}
为了修复它,我只是将实例化代码更改为:
if(class_exists(\'Plugin\')){
add_action("init", "plugin_init");
function socialsports_init() {
global $plugin;
$plugin = new Plugin;
$plugin->init();
}
}
另一种选择是在构造函数中使用不同的挂钩:
function __construct(){
add_action(\'wp_loaded\', array(&$this, \'init\'));
}
或实例化中的早期挂钩:
add_action("plugins_loaded", "plugin_init");