我正在做一个插件,它可以在WordPress数据库上进行自定义查询,然后我循环查看结果,将每个帖子标题作为实际帖子的链接。我使用get_permalink($id)来获取每个post的URI,但由于我是在循环之外执行此操作,因此我怀疑这些请求中的每个请求都在进行单独的数据库查询。我已经检查了函数代码,并试图遵循实际WordPress核心文件中的内容,但我真正感兴趣的是一种通用的方法来做到这一点,这样我就可以确保我总是在我所有的插件中编写最优化的代码。有人知道实现这一目标的最佳方法吗?
get_permalink($id)
iyfamqjs1#
在wp-p.php中添加这一行:
define('SAVEQUERIES', true);
在你的theme 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写入。希望这对你有帮助。
ABSPATH.'/sql_log.txt'
7eumitmz2#
不能评论@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");
fwrite($log_file, $q[0] . " - ($q[1] s)". " [Stack]: $q[2]" . "\n\n");
fwrite($log_file, $q[0] . " - ($q[1] s)" . "\n\n");
2条答案
按热度按时间iyfamqjs1#
在wp-p.php中添加这一行:
在你的theme functions.php文件(或插件文件)中,你可以使用:
确保
ABSPATH.'/sql_log.txt'
可以从php写入。希望这对你有帮助。
7eumitmz2#
不能评论@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");