Contar y mostrar consultas de bases de datos

9

Estoy buscando una solución para contar y mostrar todas las consultas en un sitio de WordPress. ¿Alguien sabe si hay un buen complemento?

De lo contrario, sería una solución verificar las consultas en la consola, porque estoy trabajando mucho con la consola.

pkberlin
fuente

Respuestas:

10

Puede pegar este bloque de código en su functions.phparchivo de tema de WordPress actualmente activo :

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

El bloque de código anterior representará un comentario HTML en el pie de página de su tema (antes </body>y </html>, que contiene el número de consultas de la base de datos y cómo se registraron para recuperarlo).

Michael Ecklund
fuente
Eso me ayuda ¿Existe también una solución para mostrar las consultas con su contenido? Como así: SELECT * FROM wp_posts Gracias
pkberlin
1
@derpiet Ver @toschola respuesta .
Michael Ecklund
9

Añadir ...

define( 'SAVEQUERIES', TRUE );

... a tu wp-config.php, e inspeccionar $wpdb->queriesa shutdown. Ese es el último gancho y el único después del cual no se disparan consultas. Además, funciona wp-admin/también.

Código de muestra como complemento:

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

Actualizar

Después de pensarlo un poco más, he escrito otro complemento más adecuado para mis necesidades, y probablemente el tuyo si prefieres la consola.

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

Rastree el archivo con tail(disponible en Windows si Git está instalado ):

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