计数和显示数据库查询

时间:2012-10-29 作者:pkberlin

我正在寻找一种解决方案,如何在WordPress网站中计算和显示所有查询。有人知道有没有好的插件吗?

否则,检查控制台上的查询将是一个解决方案,因为我经常使用控制台。

2 个回复
最合适的回答,由SO网友:Michael Ecklund 整理而成

您可以将此代码块粘贴到当前活动的WordPress主题中functions.php 文件:

function wpse_footer_db_queries(){
    echo \'<!-- \'.get_num_queries().\' queries in \'.timer_stop(0).\' seconds. -->\'.PHP_EOL;
}
add_action(\'wp_footer\', \'wpse_footer_db_queries\');
上面的代码块将在主题的页脚中呈现HTML注释(之前</body></html>, 包含数据库查询的数量及其检索日志的方式。

SO网友:fuxia

添加…

define( \'SAVEQUERIES\', TRUE );
…到您的wp-config.php, 和检查$wpdb->queriesshutdown. 这是最新的钩子和only 在此之后不会激发任何查询。此外,它还可以wp-admin/

插件示例代码:

<?php
/**
 * Plugin Name: T5 Inspect Queries
 * Description: Adds a list of all queries at the end of each file.
 *
 * Add the following to your wp-config.php:

define( \'WP_DEBUG\',         TRUE );
define( \'SAVEQUERIES\',      TRUE );

 */

add_action( \'shutdown\', \'t5_inspect_queries\' );

/**
 * Print a list of all database queries.
 *
 * @wp-hook shutdown
 * @return  void
 */
function t5_inspect_queries()
{
    global $wpdb;

    $list = \'\';

    if ( ! empty( $wpdb->queries ) )
    {
        $queries = array ();
        foreach ( $wpdb->queries as $query )
        {
            $queries[] = sprintf(
                \'<li><pre>%1$s</pre>Time: %2$s sec<pre>%3$s</pre></li>\',
                nl2br( esc_html( $query[0] ) ),
                number_format( sprintf(\'%0.1f\', $query[1] * 1000), 1, \'.\', \',\' ),
                esc_html( implode( "\\n", explode(\', \', $query[2] ) ) )
            );
        }

        $list = \'<ol>\' . implode( \'\', $queries ) . \'</ol>\';
    }

    printf(
        \'<style>pre{white-space:pre-wrap !important}</style>
        <div class="%1$s"><p><b>%2$s Queries</b></p>%3$s</div>\',
        __FUNCTION__,
        $wpdb->num_queries,
        $list
    );
}
在考虑了很久之后,我编写了另一个更适合我的需要的插件,如果你喜欢控制台的话,也可能是你的插件。

<?php
/**
 * Plugin Name: T5 Log Queries
 * Description: Writes all queries to \'/query-log.sql\'.
 * Plugin URI:  http://wordpress.stackexchange.com/a/70853/73
 * Version:     2012.11.04
 * Licence:     MIT
 */

add_filter( \'query\', \'t5_log_queries\' );

/**
 * Write the SQL to a file.
 *
 * @wp-hook query
 * @param   string $query
 * @return  string Unchanged query
 */
function t5_log_queries( $query )
{
    static $first = TRUE;
    // Change the path here.
    $log_path = apply_filters(
        \'t5_log_queries_path\',
        ABSPATH . \'query-log.sql\'
    );
    $header = \'\';

    if ( $first )
    {
        $time    = date( \'Y-m-d H:i:s\' );
        $request = $_SERVER[\'REQUEST_URI\'];
        $header  = "\\n\\n# -- Request URI: $request, Time: $time ------------\\n";
        $first   = FALSE;
    }

    file_put_contents( $log_path, "$header\\n$query", FILE_APPEND | LOCK_EX );

    return $query;
}
使用跟踪文件tail (可用on Windows if Git is installed):

$ tail -f query-log.sql -n 50

结束

相关推荐

GET_POSTS、TAX_QUERY和计算帖子数的问题

我想统计一下同时有3种不同分类法的帖子数量。我使用的代码是:$products = get_posts(array( \'post_type\' => \'products\', \'posts_per_page\' => -1, \'post_status\' => \'publish\', \'tax_query\' => array( \'relation\' => \'AND\',