为了将我的插件内容连接到任何地方,假设我让主题开发人员创建自己的带有前缀的挂钩(pre_
) 在他们主题的任何地方,我都不知道钩子的其他部分。那么他们会怎么做呢?
假设,在single.php
他们放置了一个钩子,如:
do_action( \'pre_kauwa\' );
在中
page.php
他们放置了一个钩子,如:
do_action( \'pre_kala\' );
等等。。。
我怎样才能得到这些do_action()
带前缀的声明pre_
从活动WordPress安装(活动主题)
or,
从活动的WordPress视口(post、page、archive-bla-bla)
。。。这样,我就可以动态地创建一个钩子列表,其中可以使用add_action()
?
正在测试
英寸
wp-includes/plugin.php
我找到了
has_filter()
函数声明。从那里开始,我进行了以下测试:
$wp_filter = $GLOBALS[\'wp_filter\'];
$has = ! empty( $wp_filter[ $tag ] );
在我的虚拟主题中
index.php
之后
the_content()
(在循环中)我放置:
do_action( \'pre_kk\' );
就在
do_action()
我拨打的电话:
$t_test = $GLOBALS[\'wp_filter\'];
$hk = \'pre_kk\';
var_dump( $t_test[$hk] );
但它抛出了一个未定义的索引。
SO网友:Nathan Johnson
pre_
是一个很糟糕的前缀,因为它会干扰所有以pre_
.
但是,如果您想获取某个页面上调用的所有操作和筛选器的名称,可以使用all
钩子,它将回调添加到每个钩子。显然,这非常昂贵,所以您不想在生产服务器上进行。
add_action( \'all\', \'wpse_all_actions\' );
function wpse_all_actions() {
static $pre = [];
$filter = current_filter();
if( \'pre_\' === substr( $filter, 0, 4 ) ) {
$pre[] = $filter;
}
if( \'shutdown\' === $filter ) {
var_dump( $pre );
}
}