Как использовать буферизацию вывода в записях WordPress?

Не похоже, что буферизация вывода учитывает эхо из встроенных функций.

function buffer_start() { ob_start(); } function buffer_end() { ob_end_flush(); } add_action('init', 'buffer_start'); add_action('admin_footer', 'buffer_end'); add_action("draft_to_publish", "my_hooked_function", 10, 1); // the hook function my_hooked_function($post) { echo("<script>console.log('some stuff I want to output to the developer console, via the html page');</script>"); } 

Так или иначе, это не сработает. Он будет игнорировать эхо, а не обновлять источник на странице. Несмотря на то, что цикл выполнения WordPress: init , draft_to_publish , admin_footer .

Если я ввожу эхо в функции buffer_start и buffer_end, он работает нормально.

Что я делаю не так? Есть ли какая-либо область или контекст или что-то, что мне нужно для ссылки из my_hooked_function чтобы убедиться, что эхо-сигнал идет на выходной буфер страницы?

Я использовал этот код в качестве отправной точки: http://www.dagondesign.com/articles/wordpress-hook-for-entire-page-using-output-buffering/

Solutions Collecting From Web of "Как использовать буферизацию вывода в записях WordPress?"

TL; DR: после выполнения draft_to_publish страница перенаправляется, поэтому вы не увидите эхо-результат.

Ссылка: https://wordpress.stackexchange.com/a/94011/71131

Я думаю, проблема заключается в том, что действие draft_to_publish сохраняет сообщение, которое вызовет запрос redirect в браузер, который снова загрузит страницу редактирования с нуля. Тогда независимо от того, какие бы скрипты ранее не отображались в нижней части страницы, не включались бы, так как они были выполнены на последней странице только мгновенно до перенаправления.

Решение должно заключаться в использовании надлежащего инструмента отладки для вывода эха на консоль javascript. См. https://github.com/nekojira/wp-php-console

Попробуйте просто использовать ob в своей функции следующим образом:

 add_action( 'draft_to_publish', 'my_hooked_function', 10, 10 ); function my_hooked_function( $post ) { ob_start(); echo '<script>console.log("some stuff to output to the developer console, via html page");</script>'; $output = ob_get_contents(); // Put ob content in a variable $ob_end_clean(); echo $output; // Echo the variable } 

И я думаю, что это лучше, чем добавить ob_start / en_flush в полный админ.