web-dev-qa-db-fra.com

Est-ce qu'un moyen d'étendre la classe WPDB et d'écraser la fonction de requête par défaut

J'essaie d'obtenir les données de requête avec trace en étendant la classe wpdb et en écrasant la fonction de requête personnalisée. Le code fonctionne correctement si je crée un lien symbolique db.php mais ne fonctionne pas directement si j’essaie de le faire dans un fichier plug-in.

Le code est:

<?php

if ( ! defined( 'SAVEQUERIES' ) ) {
  define( 'SAVEQUERIES', true );
}

class My_DB extends wpdb {
  function __construct( $dbuser, $dbpassword, $dbname, $dbhost ) {
    parent::__construct( $dbuser, $dbpassword, $dbname, $dbhost );
  }

  function query( $query ) {
    if ( ! $this->ready ) {
      if ( isset( $this->check_current_query ) ) {
        $this->check_current_query = true;
      }
      return false;
    }

    if ( $this->show_errors ) {
      $this->hide_errors();
    }

    $result = parent::query($query);
    $result = parent::query( $query );
    if ( ! SAVEQUERIES ) {
      return $result;
    }

    $i = $this->num_queries - 1;
    $this->queries[$i][3] = debug_backtrace(false);
    $this->queries[$i][4] = $this->time_start;
    $this->queries[$i][5] = $result;

    return $result;
  }
}

$wpdb = new My_DB( DB_USER, DB_PASSWORD, DB_NAME, DB_Host );

?>
3
Akash Manhas

Appeler wp_set_wpdb_vars() après avoir remplacé $wpdb fera probablement l'affaire.

$wpdb = new My_DB();
wp_set_wpdb_vars();

Cependant, le seul moyen officiellement pris en charge de remplacer wpdb consiste à placer un db.php dans le dossier wp-content. Si vous le pouvez, je suggérerais de le faire.

4
gmazzap