开发者

Is it possible to print a log of all database queries for a page request in WordPress?

开发者 https://www.devze.com 2023-02-04 09:43 出处:网络
I\'m making a plugin that does a custom query on the WordPress database, and then I\'m looping through the results listing each post title as a l开发者_如何学Pythonink to the actual post.

I'm making a plugin that does a custom query on the WordPress database, and then I'm looping through the results listing each post title as a l开发者_如何学Pythonink to the actual post.

I'm using get_permalink($id) to obtain the URI of each post, but since I'm doing this outside of the loop, my suspicion is each of these requests is making a separate database query.

I've checked out the function code and tried to follow what's going on in the actual WordPress core files, but what I'm really interested in is a general way to do this, so I can make sure I'm always writing the most optimized code in all of my plugins.

Is anyone aware of the best way to accomplish this?


In wp-config.php add this line:

define('SAVEQUERIES', true);

In your theme functions.php file (or a plugin file for that matter) you can use this:

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);
}

Make sure ABSPATH.'/sql_log.txt' is writeble from php.

Hope this helps.


Can't comment @Poelinca Dorin answer, so just stay it here. If you want to know what is launching your quire just add this

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

instead

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

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号