如何检查受保护的钩子是否已挂上?

时间:2016-08-31 作者:dan9vu

我需要保护一些挂钩,这些挂钩只能由我的主题/插件中的函数/回调挂钩。

例如:

if ( is_protected_hook(\'hook_name\') ) {
  throw new \\Exception(\'You cannot hook to a protected hook.\');
} else {
  do_action(\'hook_name\');
}
有没有办法定义is_protected_hook() 作用

如有任何建议,将不胜感激!

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

正如我在对your related question 有一个数据结构$wp_filter 它将所有信息存储在挂钩和过滤器上。您可能想试试var_dump 就为了看看它是什么样子。没有内置变量“protected”。

这就为您留下了两个选项来保持对要保护的挂钩的管理:将其构建到$wp_filter 你自己或者把它分开。我推荐后者。

维护阵列$protected_hooks. 我不知道您希望钩子受到保护的条件,但您必须在向特定钩子添加操作时设置此数组。

现在,在tempate文件中,您需要一个双重条件:挂钩是否处于活动状态,以及它是否受到保护。会是这样的:

if ((has_filter(\'hook_name\') && in_array(\'hook_name\',$protected_hooks)) ...

SO网友:Mark Kaplun

这不能通过代码来解决,因为wordpress、主题和插件占用相同的数据和程序空间,因此无法以bullet prof的方式隔离任何内容。

问题是你为什么要做这样的事?如果是因为它不稳定,那么您可以在钩子的使用旁边明确说明它仅用于内部使用。

相关推荐

绕过WP查询中的“supress_Filters”

显然,出于某种不合逻辑的原因,开发人员决定获取所有语言帖子的唯一方法是添加supress_filters=true 到WP\\u查询(而不是像这样language_code=all 选项)。无论如何,我的情况是,我需要获取所有语言的帖子,但也需要使用过滤器修改WP\\u查询。有没有办法强制将我的过滤器添加到查询中,即使supress_filters 设置为false?这是我需要添加的过滤器:add_filter( \'posts_where\', function($where, $wp_query) {