WordPress插件 - 无冲突地获取输出内容

时间:2015-10-05 16:36:28

标签: php wordpress plugins output

我正在编写一个获取HTML内容的WordPress插件

我找到了两种获得最终输出的方法:

// first way

function __myplugin_callback($buffer) {
    return $buffer;
}

function __myplugin_buffer_start() { ob_start("callback"); }

function __myplugin__buffer_end() { ob_end_flush(); }

add_action('wp_head', 'buffer_start');
add_action('wp_footer', 'buffer_end');

当我只有我的插件处于活动状态时,当我有更多插件处于活动状态时,如SEO Yoast,我会在插件之间发生冲突,而我的插件无法正常工作。

// second way
ob_start();

add_action('shutdown', function() {
$final = '';
$levels = ob_get_level();

for ($i = 0; $i < $levels; $i++)
{
    $final .= ob_get_clean();
}

echo apply_filters('final_output', $final);
}, 0);

// call the filter

add_filter('final_output', function($output)
{
     return str_replace(.., .., $output);
});

这比第一种方式更好,但我也与Visual Composer

等插件有冲突

有一种安全的方法,获取最终的html输出而不与其他插件冲突?

2 个答案:

答案 0 :(得分:0)

输出缓冲似乎是一种奇怪的方法。除非我遗漏了某些内容,否则您应该可以使用file_get_contents()

$page_content = file_get_contents( $_SERVER['REQUEST_URI'] );

答案 1 :(得分:0)

我做了这个,我认为这是在没有插件冲突的情况下获取和更改输出的最佳方法。

function myplugin_output_start()
{
    ob_start("myplugin_output_parse");
}

add_action("registered_taxonomy", "myplugin_output_start", 0);

function myplugin_output_parse($output)
{
    if(ob_get_level() > 1) {
        return $output;
    }

    // statements...

    return $output;
}