WordPress не имеет фильтра «окончательного вывода», но вы можете взломать его. Ниже приведен пример плагина "Must Use", который я создал для проекта.
Примечание: Я не тестировал никаких плагинов, которые могли бы использовать действие «shutdown».
Плагин работает путем итерации по всем открытым уровням буферов, закрывая их и фиксируя их выход. Затем он отключается от фильтра «final_output», повторяя отфильтрованный контент.
К сожалению, WordPress выполняет практически то же самое (закрытие открытых буферов), но фактически не захватывает буфер для фильтрации (просто сбрасывает его), поэтому дополнительные действия «выключения» не будут иметь к нему доступа. Из-за этого ниже действие приоритизировано выше WordPress.
в.ч.-контента/мю-плагинов/buffer.php
<?php
/**
* Output Buffering
*
* Buffers the entire WP process, capturing the final output for manipulation.
*/
ob_start();
add_action('shutdown', function() {
$final = '';
// We'll need to get the number of ob levels we're in, so that we can iterate over each, collecting
// that buffer's output into the final output.
$levels = ob_get_level();
for ($i = 0; $i < $levels; $i++) {
$final .= ob_get_clean();
}
// Apply any filters to the final output
echo apply_filters('final_output', $final);
}, 0);
В качестве примера подключения в final_output фильтра:
<?php
add_filter('final_output', function($output) {
return str_replace('foo', 'bar', $output);
});
Редактировать:
Этот код использует анонимный функции, которые поддерживаются только в PHP 5.3 или новее. Если вы используете веб-сайт с использованием PHP 5.2 или старше, вы оказываете себе плохую услугу. PHP 5.2 был выпущен в 2006 году, и хотя Wordpress STILL поддерживает его, вы не должны его использовать.
Вы можете использовать php register_shutdown_function для завершения буферизации и извлечения html. – Simon
У этого есть один недостаток, вы не можете вызвать 'ob_start, ob_clean, ..' внутри обратного вызова, который необходим для конкретной логики кэширования. http://php.net/manual/en/function.ob-start.php#refsect1-function.ob-start-parameters –