WPML

はじめに

以下のプラグインをインストールして有効化します。

  • Advanced Custom FieldsまたはACF Pro
  • WPMLおよびWPML 文字列翻訳
  • ACFML(このページで解説するアドオン)。

ACFでフィールドグループがすでに設定されている必要があります。フィールドごとの翻訳設定は後から変更できるため、作業の順序は関係ありません。フィールドグループをセットアップしてから、ACFMLの設定に戻ってください。

各フィールドグループの翻訳モードの選択

ACFのフィールドグループは、翻訳時にすべてが同じように動作するわけではありません。ACFMLはフィールドグループごとに3つのモードを用意しており、ACF > フィールドグループMultilingual Setupセクションで設定します。

言語間で同じフィールド

ほとんどのACFサイトにおける一般的な設定です。構造は同じまま、フィールドの値を各言語に翻訳します。典型的な例はOur Team(チーム紹介)ページです。チーム構成はどの言語でも同じであるため、フィールド構造はそのまま維持しつつ、各メンバーの名前とプロフィールを言語ごとに翻訳します。翻訳元言語でチーム情報を入力し、WPML > 翻訳 > ダッシュボードから投稿を翻訳に送信します。翻訳された値は、同じフィールドに紐づいた状態で返されます。

言語間で異なるフィールド

各言語で同じフィールドグループに根本的に異なるコンテンツを表示する場合に使用します。典型的な例は、地域に合わせたイベントを開催する企業です。英語のEvents(イベント)ページには英語圏向けのイベントを表示し、フランス語のページにはフランス語圏向けのイベントを表示します。フィールドグループを言語間で異なるフィールドに設定し、ローカライズする投稿を開きます。右側の言語ボックスで翻訳先言語のプラスアイコンをクリックすると、カスタムフィールドが空の下書きが開くので、言語固有の値を入力して公開します。

エキスパートモード

言語ごとに翻訳するフィールド、同じままにするフィールド、一度だけコピーしてから個別に変更するフィールドなど、混在させる必要がある場合に使用します。フィールドグループのセットアップでエキスパートモードを選択し、フィールドごとに設定を行います。動作が混在するイベントの例では、タイトルと説明を翻訳に設定し、価格、日付、住所をコピーに設定します。

各ACFフィールドタイプの翻訳設定

フィールドグループ内の各フィールドには、4つの翻訳設定のいずれかが適用されます。

  • 翻訳。フィールドの値は言語ごとに翻訳されます。
  • コピー。フィールドの値は言語間で同期されます。一度編集すると、他の言語にも反映されます。
  • 一度だけコピー。フィールドの値は翻訳のベースとしてコピーされ、その後は各言語バージョンを個別に編集できます。
  • 翻訳しない。このフィールドは翻訳プロセスで無視されます。

言語間で同じフィールドまたは言語間で異なるフィールドを選択すると、各フィールドにはそのフィールドタイプに基づいた適切なデフォルト設定が適用されます。以下の表はこれらのデフォルトを示しています。フィールドごとに上書きする場合はエキスパートモードを、フィールドタイプのデフォルトをサイト全体で上書きする場合はacfml_field_group_mode_field_translation_preferenceフィルターを使用します(後述のエッジケース向けのフックを参照)。

リピーターとフレキシブルコンテンツ – コピーまたは一度だけコピー

リピーターおよびフレキシブルコンテンツフィールドの場合、サブフィールドの設定が適用される前に、行レベルの動作を2つから選択します。

  • コピー。すべての言語で同じレイアウトと行数になります。翻訳者には同じ行が表示され、サブフィールドはそれぞれの設定に従って翻訳されます。
  • 一度だけコピー。初期コピーの後は、言語ごとにレイアウトや行数を変えられます。

言語間で構造が同じ場合(ほとんどのケース)は、コピーを選択します。言語バージョンによって構造が異なる場合(言語ごとに異なるイベントリストなど)は、一度だけコピーを選択します。

基本フィールド

タイプ言語間で同じフィールド言語間で異なるフィールド
テキスト翻訳翻訳
テキストエリア翻訳翻訳
数値コピー一度だけコピー
レンジコピー一度だけコピー
メールコピー一度だけコピー
URLコピー一度だけコピー
パスワードコピー一度だけコピー

コンテンツフィールド

タイプ言語間で同じフィールド言語間で異なるフィールド
画像コピー一度だけコピー
ファイルコピー一度だけコピー
Wysiwyg エディタ翻訳翻訳
oEmbedコピー一度だけコピー
ギャラリーコピー一度だけコピー

選択肢フィールド

タイプ言語間で同じフィールド言語間で異なるフィールド
セレクトコピー一度だけコピー
チェックボックスコピー一度だけコピー
ラジオボタンコピー一度だけコピー
ボタングループコピー一度だけコピー
真 / 偽コピー一度だけコピー

jQueryフィールド

タイプ言語間で同じフィールド言語間で異なるフィールド
Google マップコピー一度だけコピー
デイトピッカーコピー一度だけコピー
日時ピッカーコピー一度だけコピー
タイムピッカーコピー一度だけコピー
カラーピッカーコピー一度だけコピー

レイアウトフィールド

タイプ言語間で同じフィールド言語間で異なるフィールド
メッセージ翻訳翻訳
アコーディオンコピー一度だけコピー
タブコピー一度だけコピー
グループコピー一度だけコピー
リピーターコピー一度だけコピー
フレキシブルコンテンツコピー一度だけコピー
クローンコピー一度だけコピー

関連フィールド

タイプ言語間で同じフィールド言語間で異なるフィールド
リンクコピー一度だけコピー
投稿オブジェクトコピー一度だけコピー
ページリンクコピー一度だけコピー
関連コピー一度だけコピー
タクソノミーコピー一度だけコピー
ユーザーコピー一度だけコピー

PHPまたはJSONで登録されたフィールドの設定

PHP(acf_add_local_field_group()経由)またはACFのローカルJSON機能で登録されたACFフィールドグループは、管理画面の管理対象ではないため、管理画面で指定した翻訳設定は反映されません。フィールドを登録するのと同じ場所で設定を行ってください。

フィールドグループ定義の各フィールドに、wpml_cf_preferencesキーを追加します。値は4つの翻訳設定に対応する整数です。0翻訳しない(WPMLはフィールドを無視します)、1コピー(値は言語間で同期されます)、2翻訳(値は翻訳されます)、3一度だけコピー(値は新しい翻訳にコピーされ、その後各言語を個別に編集できます)を表します。

最小限の例:

acf_add_local_field_group( [
    'key'    => 'group_1',
    'title'  => 'My Group',
    'fields' => [
        [
            'key'                 => 'field_1',
            'label'               => 'Sub Title',
            'name'                => 'sub_title',
            'type'                => 'text',
            'wpml_cf_preferences' => 2, // Translate.
        ],
    ],
    // ...rest of the field-group config
] );

コードでフィールドを定義した後、管理画面で認識されるように設定をWPMLに同期します。

  1. ACF > ツールに移動します。
  2. Translate ACF Local JSON and PHP-Registered Fieldsまでスクロールします。
  3. Sync Translation Preferences for Local Fieldsで、Sync once nowを選択し、適用をクリックします。

WPMLはPHP定義から設定を読み取り、保存します。同期はトリガーしたときに1回だけ実行され、ページを読み込むたびに実行されるわけではありません。

ACFのローカルJSON機能を使用してサイト間でフィールドグループを共有する場合、ACFMLは翻訳設定を自動的にJSONファイルに書き込みます。あるサイトからJSONファイルをエクスポートし、別のサイトにインポートすると、両方でACFMLが有効になっていれば、インポート先のサイトでその設定が適用されます。

ACFフィールドラベルの翻訳

ACFフィールドラベルは、WordPressエディタやフロントエンドで各カスタムフィールドを識別する名前です(例:電話番号住所など)。これらはフィールドの値とは別に翻訳され、投稿の翻訳ジョブではなくWPML 文字列翻訳内で管理されます。

フィールドラベルを翻訳に送信するには:

  1. WPML > 翻訳 > ダッシュボードを開きます。
  2. ACF フィールドグループセクションを展開します。
  3. 翻訳するフィールドグループのField Group Labels(フィールドグループラベル)項目を選択します。
  4. 翻訳方法(PTC、翻訳者、または自分で翻訳)を選択して送信します。

翻訳が完了すると、翻訳されたラベルがフロントエンドに自動的に表示されます。

ACFフィールドの選択肢の翻訳

選択肢フィールド(セレクト、チェックボックス、ラジオボタン、ボタングループ)には、独自のオプションラベル(例:小 / 中 / 大)が含まれます。これらも投稿の翻訳内ではなく、フィールドラベルと一緒に管理されます。同じ方法で送信してください。

  1. WPML > 翻訳 > ダッシュボードを開きます。
  2. ACF フィールドグループセクションを展開します。
  3. 選択肢の値を翻訳するフィールドグループを選択します。
  4. 翻訳方法を選択して送信します。

ACFオプションページの翻訳

ACFオプションページ(連絡先詳細ヘッダー設定フッターリンクなどのグローバル設定画面)は、投稿とは別に、独自のオブジェクトタイプとして翻訳されます。

  1. WPML > 翻訳 > ダッシュボードを開きます。
  2. ACF Optionsセクションを展開します。
  3. 翻訳するオプションページを選択します。
  4. 翻訳方法を選択して送信します。

ACFがその言語のコンテキストでオプションを読み込むと、各言語のオプションページの値が自動的に表示されます。

よくある落とし穴

  • フィールドラベルが翻訳されていないように見える。これらは投稿の翻訳ではなく、文字列翻訳内で管理されています。ダッシュボードからフィールドグループのField Group Labels項目を送信してください(上記のACFフィールドラベルの翻訳を参照)。
  • 選択肢の値が翻訳されていないように見える。上記と同様です。オプションの値が含まれるように、ダッシュボードのACF フィールドグループセクションからフィールドグループを送信してください。
  • リピーターの行が同期されない。行を揃えるにはコピーを使用すべきところで、フィールドが一度だけコピーに設定されている可能性があります。フィールドグループを開き、リピーターフィールドの動作をコピーに切り替えてください。
  • 条件判定が予期しない動作をする。制御フィールドがコピーまたは翻訳しないに設定されている場合、条件の動作はすべての翻訳で翻訳元言語の値に従います。言語ごとに値が異なる必要がある場合は、制御フィールドを翻訳に設定してください。
  • ローカルフィールド(PHPで登録)が管理画面で設定した翻訳設定を無視する。フィールドグループの定義自体にwpml_cf_preferencesキーを設定し、ACF > ツールから同期してください。手順は上記のPHPまたはJSONで登録されたフィールドの設定に記載されています。ACFML 2.2.0(2026年2月)でローカルフィールドの完全なサポートが追加されましたが、古いバージョンには制限がありました。

エッジケース向けのフック

プログラムによる制御(特定のフィールドを翻訳から除外する、サイト全体でフィールドタイプのデフォルト設定を上書きする、翻訳者から注釈を隠す、または投稿の翻訳ジョブからフィールドグループの文字列を除外するなど)のために、ACFMLは2つのフィルターと4つの定数を提供しています。コード例を含む完全なリファレンスは、ACFMLフックと定数のリファレンスをご覧ください。

執筆者: Amir · 最終更新日: 2026年7月2日

執筆者:Amir · 最終更新日:2026年7月2日