是否可以在 WordPress 中为页面请求打印所有数据库查询的日志?
Posted
技术标签:
【中文标题】是否可以在 WordPress 中为页面请求打印所有数据库查询的日志?【英文标题】:Is it possible to print a log of all database queries for a page request in WordPress? 【发布时间】:2011-06-07 08:05:37 【问题描述】:我正在制作一个在 WordPress 数据库上执行自定义查询的插件,然后我将遍历结果,将每个帖子标题列为指向实际帖子的链接。
我使用get_permalink($id)
来获取每个帖子的 URI,但由于我在循环之外执行此操作,我怀疑这些请求中的每一个都在进行单独的数据库查询。
我检查了函数代码并尝试了解实际 WordPress 核心文件中发生的情况,但我真正感兴趣的是执行此操作的一般方法,因此我可以确保我始终在我所有的插件中编写最优化的代码。
有没有人知道实现这一点的最佳方法?
【问题讨论】:
【参考方案1】:在 wp-config.php 中添加这一行:
define('SAVEQUERIES', true);
在你的主题 functions.php 文件(或插件文件)中,你可以使用这个:
add_action('shutdown', 'sql_logger');
function sql_logger()
global $wpdb;
$log_file = fopen(ABSPATH.'/sql_log.txt', 'a');
fwrite($log_file, "//////////////////////////////////////////\n\n" . date("F j, Y, g:i:s a")."\n");
foreach($wpdb->queries as $q)
fwrite($log_file, $q[0] . " - ($q[1] s)" . "\n\n");
fclose($log_file);
确保ABSPATH.'/sql_log.txt'
可从 php 写入。
希望这会有所帮助。
【讨论】:
谢谢!这正是我一直在寻找的。我实际上稍微修改了该函数,因为我实际上希望在每一页的底部打印出查询列表,但如果没有你的示例,我就无法弄清楚。 谢谢@Poelinca,我也有同样的问题,但是使用该方法我只得到 SELECT 查询,而不是 INSERT/UPDATE 查询。有什么解决办法吗?有可能吗?【参考方案2】:无法评论@Poelinca Dorin 的答案,所以请留在这里。 如果您想知道是什么启动了您的查询,只需添加此
fwrite($log_file, $q[0] . " - ($q[1] s)". " [Stack]: $q[2]" . "\n\n");
改为
fwrite($log_file, $q[0] . " - ($q[1] s)" . "\n\n");
【讨论】:
以上是关于是否可以在 WordPress 中为页面请求打印所有数据库查询的日志?的主要内容,如果未能解决你的问题,请参考以下文章
在 Wordpress Datewise 中为特定类别创建存档