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

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 link 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?

Answers


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


Need Your Help

What are good candidates for base controller class in ASP.NET MVC?

asp.net-mvc controller base-class

I've seen a lot of people talk about using base controllers in their ASP.NET MVC projects. The typical examples I've seen do this for logging or maybe CRUD scaffolding. What are some other good use...

Difference between Url Encode and HTML encode

html url encoding character-encoding

What’s the difference between an URL Encode and a HTML Encode?