你在某种程度上误解了优先级是如何工作的。优先级决定了给定挂钩函数运行的顺序,例如。genesis_entry_header
. 优先级不是全局的。
从挂钩中删除操作时,需要使用与该操作最初挂钩时相同的优先级。你在做什么。
您正在添加的操作的优先级为9
:
add_action( \'genesis_entry_header\', \'shq_genestrap_post_meta_categories\', 9 );
使用的匹配优先级
9
要删除它,请执行以下操作:
remove_action( \'genesis_entry_header\', \'shq_genestrap_post_meta_categories\', 9 );
您的实际问题是,您无法在添加操作之前或已运行操作之后删除该操作。
让我们看看在函数之外运行的两个动作挂钩:
add_action(\'genesis_entry_header\', \'my_remove\', 10);
add_action( \'genesis_entry_header\', \'shq_genestrap_post_meta_categories\', 9 );
接下来发生的是《创世纪》将触发
genesis_entry_header
在其代码或模板中的某个地方挂接以下内容:
do_action( \'genesis_entry_header\' );
当这种情况发生时,您的两个函数将按优先级顺序运行:
shq_genestrap_post_meta_categories(); // Priority 9
my_remove(); // Priority 10
您正试图解开挂钩
shq_genestrap_post_meta_categories()
在…内
my_remove()
, 但这行不通,因为这已经发生了。
将优先级更改为8时,会发生以下情况:
my_remove() // Priority 8
// Priority 9, nothing is hooked anymore.
my_remove()
之前正在运行
shq_genestrap_post_meta_categories()
, 所以
my_remove()
将能够成功解除挂钩。
因此,关键在于:要删除一个动作remove_action()
需要运行函数:
添加要删除的操作后add_action()
.运行操作之前无论是谁提出了您的解决方案,都会告诉您这样挂接函数的原因。。。
add_action(\'genesis_entry_header\', \'my_remove\', 8);
function my_remove() {
remove_action( \'genesis_entry_header\', \'shq_genestrap_post_meta_categories\', 9 );
}
。。。是因为
genesis_entry_header
优先考虑
8
是要取消挂钩的功能运行之前的最后可能时刻。这意味着您几乎可以肯定我提到的两个条件已经满足:操作已经添加,但尚未运行。
很可能您实际上可以更早地删除该操作,但如果不知道所有代码的加载顺序,就不可能准确地说出具体的时间,而第三方观察员不太可能知道。