WordPress remove_filter()通过插件删除主题JS钩子

时间:2014-10-20 10:32:40

标签: php wordpress oop

我有一个主题是通过jQuery添加自定义的全屏背景图像。主题是通过名为class的{​​{1}}对象执行此操作。在类中是一个名为td_background的函数,在此钩子中,正在为自定义bg添加一个过滤器。它看起来像这样:

wp_head_hook()

我现在正试图在我正在编写的自定义插件中取消注册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); ?>

思考?我的最终目标是在页脚中取消注册此JavaScript,以便我可以添加自己的JavaScript代替它。

1 个答案:

答案 0 :(得分:1)

由于它是匿名实例化的,我们必须使用WPSE中的便捷函数remove_anonymous_object_filter(),它将类似于:

// 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_head,因为我没有td_js_buffer_footer_render正在运行。