您正在使用的挂钩创建模式。。。
public function hook_name(){
do_action(\'hook_name\');
}
有些地方你会做类似的事情:
add_action(\'hook_name\', \'some_hook\');
。。。是我记得不久前做过的事情,许多或大部分在线教程都建议这样做。但是,如果您在源代码中grep一个没有(已知)相应函数的钩子,如
the_content
这是一个钩子和一个模板标记。。。
grep -Rni \'pre_get_posts\' *
。。。然后再次grep查找关联函数。。。
grep -Rni \'function pre_get_posts\' *
。。。很多钩子都找不到。核心不使用该选项
public function hook_name(){ do_action(\'hook_name\'); }
在每一种情况下,它似乎并没有被用来实际创建钩子。看来
do_action
或
apply_filters
做所有的工作。上的示例
Codex page for do_action
确认这一点。该示例使用了一个名为
i_am_hook
但是没有这个名字的函数,只有
do_action( \'i_am_hook\', $a, $b );
. 你可以通过做一些非常简单的事情来证明这一点,比如:
function test_new_action($a,$b) {
var_dump($a,$b);
}
add_action(\'new_action\',\'test_new_action\',1,2);
$a = \'abc\';
$b = \'def\';
do_action(\'new_action\',$a,$b);
我发现了几个最近的教程,但我相信还有更多,演示了同样的事情:
您根本不需要创建这些函数,也不需要启动“空”挂钩。你只需要使用
do_action
或
apply_filters
您需要运行挂钩的位置。
您只需创建这些function hook_name(){ do_action(\'hook_name\'); }
当且仅当您希望通过使用Core的方式按名称调用钩子来运行钩子时,函数才起作用the wp_head
and wp_footer
hooks.
因此,我认为对于大多数钩子和您可能想按名称调用的钩子,您根本不需要这样做,您没有创建允许您这样做的函数。我唯一能让它起作用的方法是eval
-- 非常粗略的概念证明:
$funcnames = array(
\'funcone\',
\'functwo\'
);
foreach ($funcnames as $f) {
$str = \'function \'.$f.\' () { do_action("\'.$f.\'"); }\';
eval($str);
}
function test_new_action_v2() {
var_dump(\'Howdy\');
}
add_action(\'funcone\',\'test_new_action_v2\');
function test_new_action_v3() {
var_dump(\'Ho\');
}
add_action(\'functwo\',\'test_new_action_v3\');
funcone();
functwo();
我认为这是唯一的方法,但这会对速度造成一些影响,并且可能会有范围问题,特别是考虑到您是在类中执行它(但我还没有对此进行测试)。请参见:
https://stackoverflow.com/questions/7337883/php-define-functions-with-variable-names希望这将为您提供足够的信息,以评估您需要做什么和不需要做什么,以及您可以做什么,从而实现您的目标。