是否可以在WordPress中打印页面请求的所有数据库查询的日志?

时间:2011-01-11 17:41:19

标签: mysql wordpress wordpress-plugin

我正在制作一个在WordPress数据库上执行自定义查询的插件,然后我循环结果列出每个帖子标题作为实际帖子的链接。

我正在使用get_permalink($id)来获取每个帖子的URI,但由于我在循环之外这样做,我怀疑这些请求中的每一个都在进行单独的数据库查询。

我已经检查了功能代码,并尝试跟踪实际的WordPress核心文件中发生的事情,但我真正感兴趣的是一般的方法,所以我可以确保我总是在我的所有插件中编写最优化的代码。

有人知道实现这个目标的最佳方法吗?

2 个答案:

答案 0 :(得分:23)

在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写入。

希望这有帮助。

答案 1 :(得分:0)

无法评论@Poelinca Dorin回答,所以请留在这里。 如果你想知道什么是启动你的quire,只需添加这个

fwrite($log_file, $q[0] . " - ($q[1] s)". " [Stack]: $q[2]" . "\n\n");

代替

fwrite($log_file, $q[0] . " - ($q[1] s)" . "\n\n");