我正在构建一种扩展WordPress插件的方法,我正在开发使用以下过滤器来从其他插件中获取html内容:
$content = apply_filters('satl_render_view', array($view, $slides));
只使用一个插件就可以完美地运行,但是一旦我使用同一个过滤器激活第二个插件就会停止工作,对于任一个插件,$ content为null:
我在__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)
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;
}
}
您还需要确保更新render()方法如何将正确的信息传递回apply_filters方法,以便下一个插件具有正确的数组来运行addRender()
} else {
return array($file,$params['slides']);
}
主要学习:WordPress apply_filters比你想象的要笨重。你不能假设它为你合并了一切,它只是传递信息,你的代码需要理解它。