Je développe un thème multilingue. J'utilise la fonction __ () pour la traduction, ce qui fonctionne très bien. La langue principale est l'anglais, mais la deuxième langue est l'allemand. Pour cette deuxième langue, j'aimerais ajouter un "/ de /" - Slug, j'ai donc créé une règle de réécriture:
function rewrite_rule_de(){
add_rewrite_rule('de/(.+?)/?$', 'index.php?pagename=$matches[1]&language=de', 'top');
}
add_action('init', 'rewrite_rule_de');
Comme vous pouvez le constater, j’ai également ajouté une variable get (language = de), qui devrait indiquer à Wordpress que la page affichée est en allemand. Parce que Wordpress ne traite pas simplement cette get-variable, je l'ai ajoutée à query_vars:
function language_query_var($public_query_vars){
$public_query_vars[] = 'language';
return $public_query_vars;
}
add_action('query_vars', 'language_query_var');
Je souhaite modifier les paramètres régionaux, en fonction de la langue de la page affichée, j'utilise donc la fonction suivante:
function set_my_locale( $lang ){
if ('de' == get_query_var('language')){
return 'de_DE';
}else{
return 'en_US';
}
}
add_filter('locale', 'set_my_locale');
Mon problème ici est que get_query_var ('langue') n'est pas défini dans la fonction "set_my_locale". Mais cela fonctionne lorsqu'il est utilisé avant la boucle, par exemple ...
Ma question est donc simplement la suivante: comment puis-je modifier les paramètres régionaux (de sorte que la fonction __ () génère la langue appropriée) en fonction d'une règle de réécriture?
Mon problème ici est que
get_query_var('language')
n'est pas défini dans la fonctionset_my_locale
Parce que get_locale
(qui applique le filtre locale
) est appelé avant wp()
(qui analyse la requête et configure les variables).
Vous devrez inspecter manuellement la demande vous-même:
if ( strpos( $_SERVER['REQUEST_URI'], '/de/' ) === 0 ) {
// German
} else {
// English
}
Notez que WordPress doit s'exécuter sous l'URL racine, c'est-à-dire http://example.com/ .