2014-02-12 16 views
1

我建立一個辦法來擴展WordPress插件我使用下面的過濾器,用於從不同的插件抓住html內容開發:WordPress的自定義過濾器 - apply_filters多個

$content = apply_filters('satl_render_view', array($view, $slides));

只需一個插件完美地工作,但一旦我激活第二個插件利用相同的過濾器,它停止工作,$內容爲空插件:

我在__construct()方法的插件中添加過濾器:

add_filter('satl_render_view', array('SatellitePortraitPlugin','addRender'));

add_filter('satl_render_view', array('SatelliteAwesomePlugin', 'addRender'));

之前的任何人進入這個運行?

萬一有幫助,這是addRender方法,因爲它目前爲:

public static function addRender($params) 
{ 
    list($view, $slides) = $params; 
    $plugin = new SatelliteAwesomePlugin(); 
    return $plugin->render($view, array('slides' => $slides, 'frompost' => 'false'), false); 
} 

爲了記錄在案,我remove_filter()如果沒有內容返回試過,但沒有解決這個問題。

+0

簡化和即興編碼表明這應該起作用。我懷疑問題出現在代碼中。 –

+0

請確保您的第二個插件在'SatelliteAwesomePlugin'之後加載... 可能會有問題。 –

回答

0

Params傳遞給回調函數,在本例中爲addRender()幷包含所有想要使用相同過濾器顯示給第二個插件的HTML。爲了利用這種信息位必須改變方法:

public static function addRender($params) 
{ 
    if (is_array($params)) { 
     list($view, $slides) = $params; 
     $plugin = new SatelliteAwesomePlugin(); 
     return $plugin->render($view, array('slides' => $slides, 'frompost' => 'false'), false); 
    } else { 
     return $params; 
    } 
} 

您還需要確保更新如何渲染()方法傳遞正確的信息反饋給apply_filters方法,以便在未來的插件將有適當的數組運行addRender()

} else { 
    return array($file,$params['slides']); 
} 

主要學習:WordPress的apply_filters比你想象的要笨得多。你不能假設它爲你合併了所有的東西,它只是傳遞信息,你的代碼需要理解它。

相關問題