Como usar o buffer de saída nas funções de engano do WordPress?

Não parece que o buffer de saída leva em consideração o eco a partir de funções conectadas.

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("console.log('some stuff I want to output to the developer console, via the html page');"); } 

De alguma forma, isso não funciona. Ele ignorará o eco e não atualizará a fonte na página. Embora o ciclo de execução do WordPress seja: init , draft_to_publish , admin_footer .

Se eu inserir eco nas funções buffer_start e buffer_end, funciona como normal.

O que estou fazendo de errado? Existe algum escopo ou contexto ou algo que eu preciso referenciar dentro de my_hooked_function para garantir que o eco vá para o buffer de saída da página?

Usei esse código como ponto de partida: http://www.dagondesign.com/articles/wordpress-hook-for-entire-page-using-output-buffering/

Solutions Collecting From Web of "Como usar o buffer de saída nas funções de engano do WordPress?"

TL; DR: Depois que o draft_to_publish for executado, a página será redirecionada, então você não verá a saída ecoada.

Ref: https://wordpress.stackexchange.com/a/94011/71131

Eu acho que o problema é que a ação draft_to_publish salva a postagem, que chamará uma solicitação de redirect para o navegador, que carrega novamente a página de edição a partir do zero. Então, qualquer que seja o que os scripts anteriormente tenham repetido no final da página, não serão incluídos, pois esses foram executados na última página apenas instantes antes do redirecionamento.

A solução deve ser usar uma ferramenta de debugging adequada para exibir o eco para o console do javascript. Veja: https://github.com/nekojira/wp-php-console

Tente simplesmente usar o ob na sua function assim:

 add_action( 'draft_to_publish', 'my_hooked_function', 10, 10 ); function my_hooked_function( $post ) { ob_start(); echo ''; $output = ob_get_contents(); // Put ob content in a variable $ob_end_clean(); echo $output; // Echo the variable } 

E acho melhor que adicionar ob_start / en_flush no administrador completo.