गणना और प्रदर्शन डेटाबेस प्रश्न


9

मैं एक समाधान की तलाश में हूं कि कैसे मैं वर्डप्रेस साइट के सभी प्रश्नों को गिन और प्रदर्शित कर सकता हूं। क्या कोई जानता है, अगर कोई अच्छा प्लगइन है?

अन्यथा यह कंसोल पर प्रश्नों की जांच करने के लिए एक समाधान होगा, क्योंकि मैं कंसोल के साथ बहुत काम कर रहा हूं।

जवाबों:


10

आप अपने वर्तमान में सक्रिय वर्डप्रेस थीम 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');

कोड के ऊपर ब्लॉक, आपके विषय के पाद लेख में (पहले </body>और </html>, डेटाबेस प्रश्नों की संख्या और कैसे वे पुनः प्राप्त करने के लिए लिया लॉग युक्त एक HTML टिप्पणी प्रस्तुत करना होगा ।


यही मेरी मदद करता है। क्या इसकी सामग्री के साथ प्रश्नों को प्रदर्शित करने का कोई समाधान है? इसलिए जैसा: SELECT * FROM wp_posts धन्यवाद
pkberlin

1
@derpiet देखें @toschoके जवाब
माइकल 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 स्थापित है तो Windows पर उपलब्ध है ):

$ tail -f query-log.sql -n 50
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.