Utilisation de WPDB dans un script autonome?

J'essaie de me connecter à Wordpress en utilisant le WPDB car c'est une si belle classe et il y a aussi des configurations spécifiées dans wp-config.php donc je n'aurai pas besoin de le spécifier à nouveau.

Je vais écrire un petit script séparé de wordpress principal à exécuter en arrière-plan qui devra utiliser cette instance WPDB.

Comment puis-je archiver cela?

Toute aide est appréciée.

37
demandé sur DucDigital 2011-03-15 04:44:48

9 réponses

Le meilleur moyen(le plus rapide et le plus sûr) de charger uniquement les fonctionnalités de base de WordPress est d'utiliser le drapeau SHORTINIT comme ceci:

define( 'SHORTINIT', true );

require( '/path/to/wp-load.php' );

//Here you can use WordPress core features, for example the $WPDB object

Pour plus d'informations à ce sujet et voir ce qui est chargé, est de vérifier le code de /wp-settings.php. Vous y trouverez la section suivante:

// Stop most of WordPress from being loaded if we just want the basics.
if ( SHORTINIT )
    return false;

Cela signifie que tout ce qui suit ne sera pas chargé, et c'est beaucoup de choses comme vous pouvez le voir. L'empreinte sera beaucoup plus petite que le simple chargement du wp-load.php et vous donnera toujours accès à tous toutes les fonctions intégrées dans WordPress core, contrairement à y compris par exemple /wp-includes/wp-db.php directement. De nombreuses fonctions dans WP core ont également des dépendances dans d'autres fichiers et il peut être un gâchis de comprendre exactement quels fichiers vous devez inclure pour pouvoir faire ce que vous voulez. SHORTINIT inclut les dépendances nécessaires afin que vous n'ayez pas à vous inquiéter à ce sujet.

Si vous savez exactement ce dont vous avez besoin, par exemple seulement WPDB, le moyen le plus rapide est bien sûr d'inclure uniquement les fichiers dont vous avez besoin, mais SHORTINIT fournit un manière plus sûre et plus standardisée de charger le noyau WP et les dépendances. Avec SHORTINIT WordPress ne charge pas les plugins, la plupart des parties de l'API de plugin, les thèmes, les fonctions de thème et la plupart des fonctions admin et frontend. C'est là que le code lourd est dans une installation WordPress typique. Dans la plupart des cas, je pense que SHORTINIT vaut le petit compromis en vitesse/performance par rapport à inclure uniquement les fichiers dont vous avez besoin et c'est dans la plupart des cas un énorme gain de performance par rapport à une charge complète.

50
répondu Pelmered 2016-05-21 17:03:03
<?php

$path = $_SERVER['DOCUMENT_ROOT'];

include_once $path . '/wp-config.php';
include_once $path . '/wp-load.php';
include_once $path . '/wp-includes/wp-db.php';
include_once $path . '/wp-includes/pluggable.php';

// $wpdb is available, do stuff
42
répondu farinspace 2011-03-16 21:22:41

WordPress vous permet en fait d'utiliser votre propre DBA (database abstraction layer) simplement en créant un fichier appelé db.php et en l'enregistrant à la racine de votre répertoire wp-content.

J'ai eu le problème d'avoir besoin d'accéder à une base de données via la classe que j'ai écrite, qui n'avait rien à faire avec WordPress, mais je ne voulais pas créer un tout nouveau DBA juste aller avec ce script.

Puisque la valeur par défaut WPDB Ne vous permet pas d'utiliser le modèle d'usine, j'ai rapidement écrit quelques lignes pour le supporter, et ajouté il à db.php...

<?php

class DB extends wpdb
{
  protected static $instance = null;

  public static function getInstance()
  {
    if (!self::$instance) {
      self::$instance = new DB(DB_USER, DB_PASSWORD, DB_NAME, DB_HOST);
    }

    return self::$instance;
  }
}

$wpdb = DB::getInstance();

Maintenant, lorsque vous avez besoin d'utiliser wpdb d'ailleurs (dans mon cas une classe Non-WordPress), vous pouvez utiliser juse:

$wpdb = DB::getInstance();

À Partir de l'intérieur d'une méthode plutôt que l'horrible global.

18
répondu Matt Humphrey 2011-03-24 12:19:00

Vous pouvez utiliser $wpdb dans new .fichier php qui est à l'intérieur du dossier de thème, en utilisant le code suivant.

$url = (!empty($_SERVER['HTTPS'])) ? "https://".$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'] : "http://".$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'];
$url = $_SERVER['REQUEST_URI'];
$my_url = explode('wp-content' , $url); 
$path = $_SERVER['DOCUMENT_ROOT']."/".$my_url[0];

include_once $path . '/wp-config.php';
include_once $path . '/wp-includes/wp-db.php';
include_once $path . '/wp-includes/pluggable.php';

global $wpdb;
12
répondu Ankur21 2012-02-28 10:59:55

Vous avez juste besoin d'inclure le wp-load.fichier php dans votre script.

require('the/path/to/wp-load.php file');
4
répondu Systematix Infotech 2014-06-10 22:30:52

Cela devrait faire l'affaire:

  preg_match('/^(.+)wp-content\/.*/', dirname(__FILE__), $path);
  include($path[1] . 'wp-load.php');
4
répondu Olli Bolli 2015-02-18 09:15:17

Vous devriez juste require_once('../../../wp-load.php');

Et puis vous tous les crochets de classes wordpress et tout sera chargé. maintenant, vous pouvez commencer à interagir avec la base de données en utilisant global $wpdb et l'instance wpdb sera démarrée

3
répondu Arsalan Azhar 2013-11-13 07:43:25

Les deux étapes suivantes suffisent.

  1. Inclure le wp-blog-en-tête.fichier php
  2. avant d'utiliser le $wpdb, mettez comme global $wpdb;

Toutes les variables globales que vous pouvez utiliser dans cette page après cela. Assurez-vous de donner le chemin d'inclusion correct de wp-blog-header.php. Pas besoin de les inclure plusieurs fichiers.

2
répondu Sudharshan Ramasubramaniam 2013-08-16 01:20:35

Moyen rapide et léger avec une seule ligne est

Require(dirname(_FICHIER__)."/wp-blog-tête.php');

La raison en est que wordpress initialise le chargement de l'index.php et quand vous vérifiez l'index.php, vous voyez:

Require(dirname(__FICHIER__)."/wp-blog-tête.php');

Cela charge et Bootstrap wordpress.

Donc, pour utiliser wordpress en dehors de l'installation wordpress, créez simplement un nouveau fichier, puis écrivez :

Require(dirname(__FICHIER__)."/wp-blog-tête.php');

Ensuite, pour un test, écrivez: global $wpdb; var_export ($wpdb).

Vous avez donc maintenant accès à toutes les API wordpress et à l'objet de base de données $wpdb.

1
répondu Devqxz 2017-05-15 21:00:56