web-dev-qa-db-fra.com

"Trick" un plugin (WP-Members) pour penser que la langue du blog a changé pour une seule page

J'essaie d'éviter d'installer un plugin multilingue complet sur mon site, et j'y suis presque .

Juste une chose, je dois contrôler si ce plugin - WP-Members - est traduit ou non page par page.

La langue par défaut est le norvégien et toutes les pages enfants de/en/sont automatiquement définies en anglais (avec cette méthode ). Le plugin utilise des fichiers .po/.mo, mais la modification du code HTML ne fait pas en sorte que le plugin change de langue.

Est-il possible de tromper le plugin en lui faisant croire que le blog est dans une autre langue?

1
Garland Briggs

Oui, en quelque sorte. Tout plugin localisé, tel que WP-Members, s'exécute en dehors de la "locale" définie par WordPress. Cette valeur peut être filtrée pour WP dans son ensemble à l'aide du filtre locale. Mais il peut également être filtré pour les plugins utilisant plugin_locale

Voir: https://developer.wordpress.org/reference/hooks/plugin_locale/

Pour utiliser plugin_locale spécifique au domaine de texte pour le plugin * (qui dans ce cas est 'wp-members')

add_filter( 'plugin_locale', 'my_plugin_locale_filter', 10, 2 );
function my_plugin_locale_filter( $locale, $domain ) {

    // If the text domain is 'wp-members'
    if ( 'wp-members' == $domain ) {
        /*
         * This logic adapted from the method you referenced at
         * http://beta.beantin.se/wordpress-setting-language-individual-pages/
         * Note that the function get_top_parent_page_id() from that example
         * is used here, and the logic is not adapted to your specific 
         * question (i.e. I assume the default $postLanguage value is
         * Norwegian in your case and you are switching it to English) so 
         * change this to match what you are doing with the other elements
         * being used from that process.
         */
        $postLanguage = "en-GB";
        if (is_page()) {
                $svPageID = get_top_parent_page_id(); // ID of parent page
                if ($svPageID == "565") { // ID of the "på svenska" page
                    $postLanguage = "sv";    
                }
            $locale = $postLanguage;
        }
    }

    // Always return the value being filtered.
    return $locale;
}

* Le domaine de texte de tout plugin doit être noté dans l'en-tête du fichier principal du plugin. Par exemple, si vous ouvrez wp-members.php et consultez l'en-tête du plug-in, vous le trouverez sous la rubrique "Domaine de texte:".

2
butlerblog