web-dev-qa-db-fra.com

Comment initialiser $ wpdb?

J'ai une page .php dans la racine du thème pour vérifier les données d'un formulaire personnalisé. Après avoir reçu ces données, je dois effectuer une requête dans une table mysql personnalisée. J'ai donc besoin de $ wpdb, mais je ne peux pas l'utiliser directement (ni faire global $wpdb) car il s'agit d'un fichier .php phisical. La règle de réécriture ne affecte la requête (la requête n'est pas transmise à index.php car le fichier existe).

Donc, dans ce cas, comment puis-je créer un objet $ wpdb?

Merci

2
Dail

Tout d’abord, vous avez probablement créé un fichier isolé qui ne fait pas partie des fichiers WP. C'est pourquoi vous n'obtenez pas $ wpdb. Je suppose que vous ne pouvez pas suivre les règles/conventions générales du développement de thèmes. Ma question est maintenant comment allez-vous accéder au fichier?

peu importe, si vous incluez le fichier wp_config.php dans votre fichier, vous obtiendrez la $ wpdb dans votre fichier.

en considérant dans un répertoire sous le répertoire themes, voici comment vous incluez/demandez le fichier

require_once ('../../../wp-config.php');

vous devrez peut-être modifier le chemin en fonction de votre système.

1
HungryCoder
require_once( 'path/to/wordpress/wp-includes/wp-db.php' );
if ( file_exists( 'path/to/wordpress/wp-content/db.php' ) )
    require_once( 'path/to/wordpress/wp-content/db.php' );

$wpdb = new wpdb( 'user', 'password', 'database', 'Host' );

Pour voir comment WordPress l'initialise, voir wp-includes/load.php, ligne 326.

1
sorich87

Tout d’abord, remarquez que ce que dit HungryCoder est correct: votre fichier n’est pas aimé de WordPress

Une solution possible, qui fonctionnera sur votre dev et sur les serveurs Linux, est la suivante:

include( $_SERVER['DOCUMENT_ROOT'] . '/wp-load.php');

Une excellente solution est:

my_wpdb('test','pass',  'database', 'Host', '../path/to/wp/');

une fonction

function my_wpdb($user, $pass, $db, $Host, $path_to_root= '/../../../../../../', $run_wp_config=true){
    $path_to_wp=  dirname(__DIR__) .$path_to_root;
  //execute wp-config, if not run already
    if($exec_config && !defined('DB_Host')){    preg_match('/\<\?php(.*?)\/\* That\'s all, stop editing/si',  file_get_contents($path_to_root."wp-config.php"), $found);    eval($found[1]);    }
    require_once( $path_to_wp.'wp-includes/wp-db.php' );    if ( file_exists($path_to_wp.'wp-content/db.php' ) ) require_once($path_to_wp.'wp-content/db.php' );
    return $GLOBALS['wpdb'] = new wpdb( $user, $pass, $db, $Host );
}
0
T.Todua