นับ & แสดงแบบสอบถามฐานข้อมูล


9

ฉันกำลังมองหาวิธีการที่ฉันสามารถนับและแสดงข้อความค้นหาทั้งหมดในเว็บไซต์ WordPress ไม่มีใครรู้ว่าถ้ามีปลั๊กอินที่ดี?

มิฉะนั้นมันจะเป็นวิธีการตรวจสอบแบบสอบถามบนคอนโซลเพราะฉันทำงานกับคอนโซลมาก

คำตอบ:


10

คุณสามารถวางบล็อคของรหัสนี้ในfunctions.phpไฟล์ธีม WordPress ที่ใช้งานอยู่ในปัจจุบัน:

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>มีจำนวนการสืบค้นฐานข้อมูลและวิธีบันทึกที่พวกเขาใช้ในการดึงข้อมูล


นั่นช่วยฉันได้ นอกจากนี้ยังมีวิธีแก้ปัญหาเพื่อแสดงข้อความค้นหาที่มีเนื้อหาหรือไม่ เช่นเดียวกับ: SELECT * FROM wp_posts ขอบคุณ
pkberlin

1
@derpiet ดู@toscho's คำตอบ
Michael Ecklund

9

เพิ่ม ...

define( 'SAVEQUERIES', TRUE );

... เพื่อคุณwp-config.phpและตรวจสอบที่$wpdb->queries shutdownนั่นคือเบ็ดล่าสุดและอันเดียวหลังจากนั้นไม่มีการสืบค้น นอกจากนี้ยังใช้งานได้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
 * Author:      Thomas Scholz
 * Author URI:  http://toscho.de
 * 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(มีอยู่บน Windows หากติดตั้ง Git ):

$ tail -f query-log.sql -n 50
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.