I’m writing a WordPress plugin that obtain the HTML contents
i found 2 ways to obtain the final output:
// 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');
That works when i have only my plugin active, when i have more plugins active, like SEO Yoast, i get conflicts between plugins and mine is not working properly.
// 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);
});
This works better than the first way but i have also conflicts with plugins like Visual Composer
There is a safe way, to obtain the final html output without conflicts with other plugins?
2
Answers
I made this and i think this is the best way to obtain and change the output without plugin conflicts.
Output buffering seems like an odd way to do this. Unless I’m missing something, you should be able to use
file_get_contents()
: