Gengo : résoudre l’erreur Call to a member function wp_rewrite_rules() on a non-object in /wp-includes/classes.php

Gengo, plugin de wordpress pour le multilinguisme, entre en conflit avec certains plugins lors de leurs installation.

Le code d’erreur est de la forme :

Fatal error: Call to a member function wp_rewrite_rules() on a non-object in /wp-includes/classes.php on line ...

que se passe t il donc pour obtenir cette erreur ?

En simplifiant, cette erreur survient lorsqu’un plugin essaye de définir sa langue avant que Gengo soit chargé, et que la fonction du plugin enquestion « load_plugin_textdomain » doit être encapsulée dans une autre fonction appelée au init pour fonctionner.

Là vous êtes paumés et vous sortez un mouchoir, oui je sais. Mais en fin de compte ce n’est pas si compliqué que cela.

Par exemple pour le plugin Cforms qui entre en conflit avec Gengo, en allant /plugins/cforms/cforms.php, on a à la ligne 33 :
load_plugin_textdomain('cforms');

Et c’est cette ligne de code qui pose souci, il faut l’encapsuler dans une autre fonction et l’appeler au init pour que tout rentre dans l’ordre.

Donc
load_plugin_textdomain('cforms');
devient
function cforms_load_textdomain() {
load_plugin_textdomain('cforms');
}
add_action('init', 'cforms_load_textdomain');

Un autre exemple ? Cette fois-ci avec MailPress, plugin d’envoide newsletter pour wordpress, qui pose lui souci avec Gengo.
Là encore, en allant dans /plugins/mailpress/Mailpress.php, on a ligne 34 :

// for gettext
load_plugin_textdomain('MailPress', MP_PATH . 'mp-content/languages');

Sur le même principe, la solution afin que tout fonctionne correctement est :
function mailPress_load_textdomain() {
//load_plugin_textdomain('cforms');
load_plugin_textdomain('MailPress', MP_PATH . 'mp-content/languages');
}
add_action('init', 'mailPress_load_textdomain');

Gengo : comment résoudre l’erreur Call to undefined function get_currentuserinfo() in /wp-content/plugins/gengo/gengo.php on

Gengo est un plugin de wordpress relativement puissant permettant de gérer le multilinguisme.

Toutefois, il arrive souvent qu’il rentre en conflit avec d’autres plugins, notamment en affichant l’erreur suivante :

Call to undefined function get_currentuserinfo() in /wp-content/plugins/gengo/gengo.php on line

La solution à ce souci est relativement simple, et est donnée ici , et effectivement c’est logique :

La fonction get_currentuserinfo() est défini dans le fichier pluggable.php, fichier qui est chargé APRÈS que tous les plugins aient été chargés, ce qui veut dire que vous appeler une fonction qui n’a pas encore été définie au moment ou elle essaye d’être exécutée depuis votre plugin.

Dans mon cas l’appel posant problème venait de gengo :

function locale($locale) {
global $wp_rewrite, $gengo_use_default_language, $userdata;
if (isset($this->processed_locale)) return $locale;
$this->processed_locale = true;
if (!$this->languages) return $locale;
if (is_admin() || $gengo_use_default_language) {
get_currentuserinfo();
$this->add_language_preference($this->get_default_language_id());
}

devient

function locale($locale) {
global $wp_rewrite, $gengo_use_default_language, $userdata;
// On inclus le fichier où est définie la fonction :
require (ABSPATH . WPINC . '/pluggable.php');
if (isset($this->processed_locale)) return $locale;
$this->processed_locale = true;
if (!$this->languages) return $locale;
if (is_admin() || $gengo_use_default_language) {
get_currentuserinfo();
$this->add_language_preference($this->get_default_language_id());
}