是否可以在 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 中为自定义帖子类型添加附加页面

在 Wordpress Datewise 中为特定类别创建存档

如何在WordPress中为类别页面查询创建漂亮的URL?

仅在 wordpress 中显示所选类别页面的子类别

是否可以在 Hadoop Mapreduce 中为单个作业打印 Mapper 和 reducer 输出

Youtube 尺寸 wordpress