Compter et afficher les requêtes de base de données

9

Je recherche une solution pour compter et afficher toutes les requêtes sur un site WordPress. Est-ce que quelqu'un sait s'il existe un bon plugin?

Sinon, ce serait une solution pour vérifier les requêtes sur la console, car je travaille beaucoup avec la console.

pkberlin
la source

Réponses:

10

Vous pouvez coller ce bloc de code dans votre functions.phpfichier de thème WordPress actuellement actif :

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

Le bloc de code ci-dessus, rendra un commentaire HTML dans le pied de page de votre thème (avant </body>et </html>, contenant le nombre de requêtes de base de données et la façon dont le journal a été récupéré.

Michael Ecklund
la source
Ça m'aide. Existe-t-il également une solution pour afficher les requêtes avec leur contenu? Comme ça: SELECT * FROM wp_posts merci
pkberlin
1
@derpiet Voir @toschola réponse .
Michael Ecklund
9

Ajouter …

define( 'SAVEQUERIES', TRUE );

… Chez vous wp-config.php, et inspectez $wpdb->queriesà shutdown. C'est le dernier crochet et le seul après lequel aucune requête n'est lancée. De plus, cela fonctionne wp-admin/aussi.

Exemple de code en tant que plugin:

<?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
    );
}

Mise à jour

Après y avoir réfléchi un peu plus longtemps, j'ai écrit un autre plugin plus adapté à mes besoins - et probablement le vôtre si vous préférez la console.

<?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;
}

Suivez le fichier avec tail(disponible sur Windows si Git est installé ):

$ tail -f query-log.sql -n 50
fuxia
la source