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?
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"
);
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.
Vous devez d'abord déclarer $wpdb
global, puis inclure wp-load.php:
global $wpdb;
require_once('/path/to/wordpress/wp-load.php');