Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/253.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php WordPress remove_filter()通过插件移除主题JS挂钩_Php_Wordpress_Oop - Fatal编程技术网

Php WordPress remove_filter()通过插件移除主题JS挂钩

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')

我有一个主题是通过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'), 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
。非常感谢!