Можно ли распечатать журнал всех запросов к базе данных для запроса страницы в WordPress? - PullRequest
6 голосов
/ 11 января 2011

Я создаю плагин, который выполняет пользовательский запрос к базе данных WordPress, а затем перебираю результаты, перечисляя каждый заголовок поста в качестве ссылки на фактическое пост.

Я использую get_permalink($id) для получения URI каждого сообщения, но, поскольку я делаю это вне цикла, я подозреваю, что каждый из этих запросов выполняет отдельный запрос к базе данных.

Я проверил код функции и попытался следить за тем, что происходит в реальных файлах ядра WordPress, но что меня действительно интересует, так это общий способ сделать это, поэтому я могу быть уверен, что всегда написание наиболее оптимизированного кода во всех моих плагинов.

Кто-нибудь знает, как лучше всего это сделать?

Ответы [ 2 ]

23 голосов
/ 11 января 2011

В 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.

Надеюсь, это поможет.

0 голосов
/ 17 марта 2017

Не могу прокомментировать ответ @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");

...