WordPress自定义过滤器 - apply_filters倍数

时间:2014-02-12 00:10:20

标签: php wordpress wordpress-plugin

我正在构建一种扩展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(),但这并没有解决问题。

1 个答案:

答案 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比你想象的要笨重。你不能假设它为你合并了一切,它只是传递信息,你的代码需要理解它。