Php WordPress remove_filter()通过插件移除主题JS挂钩
我有一个主题是通过jQuery添加自定义的全屏背景图像。主题是通过名为Php WordPress remove_filter()通过插件移除主题JS挂钩,php,wordpress,oop,Php,Wordpress,Oop,我有一个主题是通过jQuery添加自定义的全屏背景图像。主题是通过名为td\u background的类对象来实现的。在类中有一个名为wp\u head\u hook()的函数,在这个钩子中,为自定义bg添加了一个过滤器。它看起来像这样: class td_background { // ..some stuff function __construct() { add_action('wp_head', array($this, 'wp_head_hook')
td\u background
的类
对象来实现的。在类中有一个名为wp\u head\u hook()
的函数,在这个钩子中,为自定义bg添加了一个过滤器。它看起来像这样:
class td_background {
// ..some stuff
function __construct() {
add_action('wp_head', array($this, 'wp_head_hook'), 10);
}
function wp_head_hook() {
add_filter( 'td_js_buffer_footer_render', array($this, 'add_js_hook'));
}
function add_js_hook($js) {
// Custom JS added here for background image
return $js
}
}
new td_background();
我现在正试图在我正在编写的自定义插件中取消注册add_js_hook
,但是我在思考如何使用所有这些嵌套时遇到了困难。我试过一些方法,例如:
<?php
// This...
remove_filter( 'wp_footer', array($td_background, 'td_js_buffer_footer_render'));
// ...and this
remove_filter( 'wp_footer', 'td_js_buffer_footer_render');
// ...and even
remove_filter( 'wp_footer', 'add_js_hook', 100);
?>
我还尝试将上述内容更改为wp\u head
想法?我的最终目标是在页脚中注销此JavaScript,以便我可以添加我自己的JavaScript来代替它。由于它是匿名实例化的,我们必须使用WPSE中的handy函数,它类似于:
// Run this from a plugin
add_action( 'template_redirect', 'kill_anonymous_example', 0 );
function kill_anonymous_example() {
remove_anonymous_object_filter(
'wp_head',
'td_background',
'wp_head_hook'
);
}
我测试了杀死
wp\u head
,因为我没有运行td\u js\u buffer\u footer\u render
。它是匿名实例化的,你会得到很酷的信息,但似乎不是这样……至少我没有将其作为匿名函数列出。更进一步。我可以删除背景…但是在wp\u head\u hook
下添加的其他过滤器也在这个过程中被删除。有针对单个过滤器的建议吗?请尝试删除匿名对象过滤器('td_js_buffer_footer_render'、'td_background'、'add_js_hook')代码>背景重新出现。因为你的答案确实会带来变化,所以我要试着剖析一下到底发生了什么。如果我再检查一下remove\u anonymous\u object\u filter()
,我肯定会找到答案的。是的,我会关注apply\u filters('td\u js\u buffer\u footer\u render',/*等*/)所做的事情!结果是remove_anonymous_object_filter('td_js_buffer_footer_render','td_background','add_js_hook')代码>。唯一的区别是将操作添加到wp\u footer
hook,而不是template\u redirect
。非常感谢!