java-beginner.com ブログ

プログラミングを学習するブログ(Javaをメインに)

Cocoonでサイト名とキャッチフレーズを言語で切り替える方法

投稿日:

最終更新日:2021年03月06日

アイキャッチ

こんにちは。「Javaを復習する初心者」です。今回はWordPressに関する記事を書きました。

このサイトは現在、WordPressを使って構築されています。テーマは(この記事を書いたときは)Cocoonを使っています。最近はサイトの多言語化に興味を持ち、いくつかのページを英訳してみました。多言語化のために、BOGOというプラグインを使っています。

この記事ではCocoonの場合で、BOGOを使って、サイト名とキャッチフレーズを切り替える方法を紹介します。

試した動作環境

この記事を作成したときに試した動作環境を記載します。

WordPress、テーマ、プラグインは以下です。

  • WordPress 5.6.1
  • 親テーマ:Cocoon バージョン: 2.2.7.2
  • 子テーマ:Cocoon Child バージョン: 1.1.2
  • BOBO バージョン 3.4

サイトのタイトルとキャッチフレーズは以下を設定しました。

サイトのタイトル
表示テスト サイトタイトル
キャッチフレーズ
表示テスト キャッチフレーズ
sitename-catchphrase

BOGOのLanguage Packsの設定は以下のようにしました。

  1. 日本語をメインの言語に選択している。
  2. English (United States) [en_US]を有効にしている。
  3. その他の言語は有効にしていない。
BOBO-Language-Packs

Terms Translationの設定は以下のようにしました。

サイトのタイトルの英訳
Display Test: site title
キャッチフレーズの英訳
Display Test: catchphrase
BOGO-Terms-Translation

以下の日本語記事を新規作成しました。

タイトル
表示テスト 記事タイトル
本文
表示テスト 本文

上記記事に対応する英訳記事を以下のように作成しました。

タイトル
Display Test: article title
本文
Display Test: body

以下は日本語と英語の記事ページの表示です。

display-test_jap
display-test_en

上の画像では英語の記事ページを表示していますが、サイトのタイトルとキャッチフレーズが日本語のままです。テーマによってはBOGOのTerms Translationに設定した値が表示されます。Cocoonではその値に置き換わりません。

Cocoonではサイトのタイトルとキャッチフレーズの表示の際に以下の関数が使われています。

  • get_bloginfo(‘name’)
  • get_bloginfo(‘description’)

上記関数が返却する値をBOGO側が書き換えることはないようです。そこで試行錯誤してみると、Cocoonでは上記関数の値を直接画面表示をしているわけではないことが分かりました。画面に表示されるサイトのタイトルとキャッチフレーズを変更することがfunction.phpを使うこと可能であることが分かりました。

書き換える方法

Cocoonのサイトのタイトルとキャッチフレーズの取得箇所は以下のように記述されています。

cocoon-master/lib/html-forms.php

  $site_logo_text = apply_filters('site_logo_text', get_bloginfo('name'));

cocoon-master/tmp/header-tagline.php

  <div class="tagline" itemprop="alternativeHeadline"><?php echo apply_filters('get_tagline_text', get_bloginfo('description')) ?></div>

apply_filters関数が使われているため、フィルターフックに関数を追加することで、値を書き換えることが出来そうです。試行錯誤しているうちに、2つの方法で値を書き換えることが出来ると分かりました。それぞれを紹介します。なお、子テーマのfunction.phpに記述を追加するという前提です。

方法1:BOGOで定義されている関数を使う方法

bogoフォルダのincludes/pomo.phpに以下の関数が定義されています。

      function bogo_bloginfo_filter( $output, $show )

実際の出力を見ると、この関数がサイト名とキャッチフレーズをTerms Translationの設定で使って書き換えているとわかりました。

そこで、子テーマのfunction.phpに以下の記述を追加することで書き換えができました。

方法1

if (function_exists('bogo_bloginfo_filter')) {
   add_filter('site_logo_text', 'my_site_logo_text');
   add_filter('get_tagline_text', 'my_get_tagline_text');

   function my_site_logo_text($arg) {
       return bogo_bloginfo_filter($arg, 'name');
   }
   function my_get_tagline_text($arg) {
       return bogo_bloginfo_filter($arg, 'description');
   }
}

以下が英語記事の表示です。

test_en_after

サイト名とキャッチフレーズがTerms Translationの設定に入力した値になっています。

方法2:get_locale関数を使う方法

get_locale関数は表示しているページの言語設定を取得する関数のようです。今回のBOGOの設定では、get_locale関数が返却する値は「ja」か「en_US」になります。このようになるのは、BOGOがページの言語設定を切り替えてくれるからだと思います。

get_locale関数の返却値を判断し、返却する値を分岐させることを考えました。この方法ではサイト名とキャッチフレーズをfunction.phpに記述した値で直接書き換えることできます。以下がソースコードです。

方法2

add_filter('site_logo_text', 'my_site_logo_text');

function my_site_logo_text($arg) {
    $locale = get_locale();
    if ('en_US' == $locale) {
        $arg = 'Display Test: site title (literal)';
    }
    return $arg;
}

add_filter('get_tagline_text', 'my_get_tagline_text');

function my_get_tagline_text($arg) {
    $locale = get_locale();
    if ('en_US' == $locale) {
        $arg = 'Display Test: catchphrase (literal)';
    }
    return $arg;
}

サイト名の英訳は上記の6行目、キャッチフレーズの英訳は上記の16行目に記述した値に書き換わります。

以下が実際の表示画面です。

test_en_after_literal

サイト名とキャッチフレーズがfunction.phpに記述した値になっています。

この方法ではBOGOのTerms Translationに設定した値を使うことは出来ません。その代わり、BOGOで定義された関数を使わずに済みます。

以上、CocoonとBOGOでサイト名とキャッチフレーズを変換する方法を紹介しました。参考になれば幸いです。