2014-10-20 90 views
2

我有一個主題是通過jQuery添加一個自定義的全屏幕背景圖像。主題是通過稱爲td_backgroundclass對象完成的。在這個類中有一個叫wp_head_hook()的函數,在這個鉤子中,爲自定義bg添加了一個過濾器。它看起來是這樣的:WordPress remove_filter()通過插件刪除主題JS鉤子

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_head

想法?我的最終目標是在頁腳中註銷此JavaScript,以便我可以添加自己的代替它。

+0

它正在匿名實例化,你會[需要這個](http://wordpress.stackexchange.com/questions/57079/how-to-remove-a-filter-that-is-an-anonymous-object/57088#57088) – brasofilo 2014-10-20 16:56:01

+0

很酷的信息,但似乎並沒有...至少我沒有看到這被列爲匿名函數。 – rnevius 2014-10-20 19:56:41

回答

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運行。

+0

與此接近。我能夠刪除背景......但是在'wp_head_hook'下還添加了其他過濾器,這些過濾器也在過程中被殺死。任何針對單個過濾器的建議? – rnevius 2014-10-20 20:18:20

+0

嘗試'remove_anonymous_object_filter('td_js_buffer_footer_render','td_background','add_js_hook');' – brasofilo 2014-10-20 20:20:33

+0

背景重新出現。既然你的答案確實導致了一個變化,我將試着剖析實際發生​​的事情。我敢肯定,如果我再檢查一下'remove_anonymous_object_filter()',我會發現它。 – rnevius 2014-10-20 20:23:29