Je cherche une solution pour compter et afficher toutes les requêtes sur un site WordPress. Est-ce que quelqu'un sait, s'il y a un bon plugin?
Sinon, ce serait une solution de vérifier les requêtes sur la console, car je travaille beaucoup avec la console.
Vous pouvez coller ce bloc de code dans le fichier functions.php
du 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 manière dont elles ont été consignées dans le journal.
Ajouter …
define( 'SAVEQUERIES', TRUE );
… À votre wp-config.php
et inspectez $wpdb->queries
à shutdown
. C'est le dernier hook et le only one après lequel aucune requête n'est déclenchée. De plus, cela fonctionne aussi sur wp-admin/
.
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
);
}
Après 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;
}
Suivre le fichier avec tail
(disponible sous Windows si Git est installé ):
$ tail -f query-log.sql -n 50