web-dev-qa-db-fra.com

Démarrage de Wordpress MultiSite en dehors de Wordpress - Pas de $ wpdb

Je travaille sur un plugin permettant à un système d'utiliser Wordpress comme base d'authentification afin de pouvoir utiliser mes utilisateurs Wordpress existants dans une autre application. Le plugin fonctionne très bien en mode mono-site:

include /path/to/wordpress/wp-config.php
global $wpdb;
// SQL and code to select user and compare entered passwords

J'ai besoin que cela fonctionne aussi contre une installation Wordpress Multisite. Lorsque je récupère le fichier wp-config.php pour le site MS, je me retrouve avec cette erreur:

Fatal error: Call to a member function set_prefix() on a non-object in /path/to/wordpress/wp-includes/ms-settings.php on line 126

À la ligne 126, WP tente de définir le préfixe de la table sur $ wpdb, mais pour une raison quelconque, $ wpdb n'existe pas ici. J'ai couru xdebug et $ wpdb est créé, mais ms-settings.php ne le voit pas. Je peux résoudre ce problème en ajoutant:

global $wpdb;

juste avant la ligne 126 et cela fonctionne, mais je ne veux pas modifier le code Wordpress de base. Existe-t-il un meilleur moyen de démarrer Wordpress?

1
dragonmantank

Vous voudrez inclure le wp-load.php, pas le wp-config.php.

En fonction de la façon dont vous le faites, vous devrez peut-être également définir des variables $_SERVER si elles ne le sont pas déjà pour empêcher WordPress d'essayer de vous rediriger. Par exemple:

$_SERVER = array(
  "HTTP_Host" => "http://example.com",
  "SERVER_NAME" => "http://example.com",
  "REQUEST_URI" => "/",
  "REQUEST_METHOD" => "GET"
);
2
prettyboymp

Je pense que ce que vous ressentez, c’est que vous essayez de charger Wordpress depuis une méthode, une fonction ou un rappel qui n’a pas accès à la portée globale.

Si Wordpress est chargé en dehors de cela, dans mon cas, il n'y a pas eu d'erreur.

2
Mackstar

Vous devez d'abord déclarer $wpdb global, puis inclure wp-load.php:

global $wpdb;
require_once('/path/to/wordpress/wp-load.php');
0
Dima L.