web-dev-qa-db-ja.com

ブログの言語が1ページに変更されたと考えるためのプラグイン(WP-Members)の「トリック」

私は自分のサイトに本格的な多言語プラグインをインストールしないようにしています、そして私はほぼそこにいます。

1つだけです、私はこのプラグイン - WP-Members - がページごとに翻訳されるかどうかを制御する必要があります。

デフォルトの言語はノルウェー語で、/ en /の子であるすべてのページは自動的に英語に設定されています(この方法を使用して)。プラグインは.po/.moファイルを使用していますが、htmlコードを変更してもプラグインの言語は変更されません。

ブログが別の言語であると思うようにプラグインをどうにかしてトリックすることは可能ですか?

1
Garland Briggs

はい、そうです。 WP-Membersのようなローカライズされたプラグインは、WordPressが設定されている「ロケール」で動作します。この値は、localeフィルタを使用して、全体としてWPに対してフィルタ処理できます。しかし、 plugin_locale を使用してプラグイン用にフィルタリングすることもできます。

参照: https://developer.wordpress.org/reference/hooks/plugin_locale/

プラグイン*のテキストドメイン固有のplugin_localeを使用するには(これは '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;
}

*プラグインのテキストドメインは、プラグインのメインファイルのヘッダーに記載されています。例えば、あなたがwp-members.phpを開いてプラグインヘッダを見ると、これは "Text Domain:"という見出しの下にリストされているでしょう。

2
butlerblog