如何在WordPress钩子函数中使用输出缓冲?

时间:2015-07-06 作者:Magne

输出缓冲似乎没有考虑挂钩函数中的echo。

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.

如果我将echo输入到buffer\\u start和buffer\\u end函数中,它会正常工作。

我做错了什么?我是否需要从内部引用任何范围、上下文或其他内容my_hooked_function 要确保回音到达页面的输出缓冲区?

我使用此代码作为起点:http://www.dagondesign.com/articles/wordpress-hook-for-entire-page-using-output-buffering/

2 个回复
SO网友:Magne

TL;DR:在draft_to_publish 钩子被执行,页面被重定向,因此您不会看到回显的输出。

参考号:https://wordpress.stackexchange.com/a/94011/71131

我认为问题是draft\\u to\\u publish操作保存了帖子,这将调用redirect 请求浏览器,浏览器会重新加载编辑页。然后,无论之前在页面底部响应的脚本是什么,都不会被包括在内,因为这些脚本是在重定向发生之前的瞬间在最后一页上执行的。

解决方案应该是使用适当的调试工具将echo输出到javascript控制台。请参见:https://github.com/nekojira/wp-php-console

SO网友:Dexter0015

尝试在函数中简单地使用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\\u start/en\\u flush更好。

结束

相关推荐

Hooks for Links Box

Possible Duplicate:Getting archive pages in WP's AJAX internal link finder? 新的有挂钩吗internal links box 创建于WP 3.1? 我正在尝试在插件中修改它。