覆盖或替换WP_FOOTER中的代码

时间:2014-09-19 作者:Howdy_McGee

我有一段代码通过以下方式动态添加到我的页脚中add_action(\'wp_footer\' ...). 不幸的是,我不知道如何使用常规方法删除它,我已经研究了以下问题,并尝试使用那里的解决方案:

remove_action or remove_filter with external classes?

但我没有找到任何答案,所以现在我正在寻找替代方案。有没有一种方法可以preg_replace 关于wp_footer()? 有没有其他方法可以移除wp_footer 不使用remove_action()?

More Information:

插件具有output file. 第697行是实际添加动作的位置:

add_action(\'wp_footer\', array($this, \'add_inline_styles\'));

实际功能在第1743行定义

我不确定是否引用RevOperations::RevSliderFront:: - 这是initial setup file 在插件文件夹的根目录中。

1 个回复
最合适的回答,由SO网友:aifrim 整理而成

因为你排除了remove_action 只有一种方法可以做到这一点。你已经猜到了:preg_repalce, substr 混合,但需要一点帮助和PHP DOM

add_action(\'wp_footer\', \'my_start_footer_ob\', 1);
function my_start_footer_ob() {
    ob_start("my_end_footer_ob_callback");
}

add_action(\'wp_footer\', \'my_end_footer_ob\', 1000);
function my_end_footer_ob() {
    ob_end_flush();
}

function my_end_footer_ob_callback($buffer) {
    // remove what you need from he buffer

    return $buffer;
}
my_end_footer_ob_callback 您可以编辑$buffer 满足您的需求。这个$buffer 在调用所有操作和筛选器后,参数应包含页脚的所有内容。如果它不只是编辑1000 到abigger number 因此my_end_footer_ob 被称为last。

现在,我不知道是什么HTML action生成但您可以使用的内容pre_replace 或一系列substrs将其删除。

如果要使用PHP DOM 这样做:

function my_end_footer_ob_callback($buffer) {
    // remove what you need from he buffer

    $doc = new DOMDocument;
    $doc->loadHTML($buffer);

    $docElem = $doc->getElementById("theID");

    if($docElem !== NULL) // if it exists
        $docElem->parentNode->removeChild($docElem);

    return $doc->getElementsByTagName(\'body\')->firstChild->nodeValue;
}
告诉我这是否适合你。

结束