web-dev-qa-db-fra.com

Polylang: pll_e () & pll __ () sur functions.php, ne fonctionne pas

J'ai sur functions.php des fonctions qui font écho à des blocs de HTML. Le problème vient du plugin Polylang, qui utilise les fonctions personnalisées pll_e () et pll __ ().

Celles-ci fonctionnent correctement sur index.php sur tous les thèmes, mais ne fonctionnent pas correctement sur functions.php, qui me renvoie toujours les chaînes de langue par défaut, même après les avoir enregistrées du côté de l’administrateur.

Donc, les blocs imprimés sur index.php en utilisant les fonctions pll_ fonctionnent correctement. Mais les mêmes blocs imprimés sur functions.php, viennent toujours en anglais.

J'ai posté ceci sur le forum officiel du support des plugins. Aucune réponse pour l'instant.

Quelqu'un ici a une idée de ce que cela peut être?

Merci beaucoup!

1
Lightworker

Je n'ai aucune expérience avec le plugin Polylang, mais je pense qu'il est prudent de supposer que cela est dû à l'ordre de chargement du plugin Polylang et au functions.php de votre thème. Lorsque vous appelez une fonction dans la portée globale (c'est-à-dire pas à partir d'une autre fonction) de index.php ou de tout autre fichier de modèle, elle sera exécutée à un stade avancé du processus de chargement de la page, une fois WordPress complètement initialisé et même après le serveur. a commencé à envoyer la réponse au client.

Une fonction appelée depuis la portée globale du fichier functions.php sera toutefois exécutée beaucoup plus tôt. Lors d'un chargement de page typique, WordPress se configure en premier lieu, puis charge les plugins et enfin le thème. Toutefois, ce processus n’est pas aussi linéaire que vous le pensez, car certains plug-ins peuvent dépendre de fonctionnalités qui ne seront peut-être pas disponibles avant l’initialisation complète de WordPress, le chargement du thème ou le début de la réponse du serveur de pages. WordPress résout ce problème en utilisant hooks , qui permet à un plugin ou à un thème de faire exécuter du code à certaines étapes du processus de chargement.

Faire une longue réponse court Encore plus longtemps, vous devez vous assurer de ne pas appeler pll_e() ou pll__() tant que vous n'êtes pas certain que le plug-in Polylang est prêt. Cela peut être déterminé en regardant sa source (ou peut-être sa documentation), mais j'imagine qu'il est suffisant de se connecter à un crochet init. Les fonctions appelées dans la portée globale de functions.php seront exécutées avant le hook init, mais en ajoutant un hook init, vous pourrez faire en sorte qu'une fonction soit exécutée ultérieurement. Voici comment:

function my_setup() {
    global $some_var;
    $some_var = pll__('A string in need of localization', 'localization_domain'); // This is assuming that this function behaves analogous to __() 

    pll_e("We'll just echo this, somewhere", 'localization_domain');
}
add_action('init', 'my_setup');
1
Simon