我正在编写一个获取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输出而不与其他插件冲突?
答案 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;
}