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);
});
Edit:
Этот код использует анонимные функции, которые поддерживаются только в PHP 5.3 или новее. Если вы работаете с сайтом, использующим PHP 5.2 или старше, вы оказываете себе медвежью услугу. PHP 5.2 был выпущен в 2006 году, и хотя Wordpress ( edit: в версии WP <5.2 </em>) STILL поддерживает его, вы не должны его использовать.