WordPressでのACFカスタムフィールドの翻訳方法 – フィールドグループ、リピーター、オプションページ
WordPressサイトのすべてのACFカスタムフィールドを、訪問者が話すあらゆる言語に翻訳する方法を説明します。このガイドでは、フィールドグループ、リピーター、フレキシブルコンテンツ、画像フィールド、オプションページ、およびフィールドラベル自体の翻訳について解説します。ACFMLはACFおよびACF Proのフィールドを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に同期します。
- ACF > ツールに移動します。
- Translate ACF Local JSON and PHP-Registered Fieldsまでスクロールします。
- Sync Translation Preferences for Local Fieldsで、Sync once nowを選択し、適用をクリックします。
WPMLはPHP定義から設定を読み取り、保存します。同期はトリガーしたときに1回だけ実行され、ページを読み込むたびに実行されるわけではありません。
ACFのローカルJSON機能を使用してサイト間でフィールドグループを共有する場合、ACFMLは翻訳設定を自動的にJSONファイルに書き込みます。あるサイトからJSONファイルをエクスポートし、別のサイトにインポートすると、両方でACFMLが有効になっていれば、インポート先のサイトでその設定が適用されます。
ACFフィールドラベルの翻訳
ACFフィールドラベルは、WordPressエディタやフロントエンドで各カスタムフィールドを識別する名前です(例:電話番号、住所など)。これらはフィールドの値とは別に翻訳され、投稿の翻訳ジョブではなくWPML 文字列翻訳内で管理されます。
フィールドラベルを翻訳に送信するには:
- WPML > 翻訳 > ダッシュボードを開きます。
- ACF フィールドグループセクションを展開します。
- 翻訳するフィールドグループのField Group Labels(フィールドグループラベル)項目を選択します。
- 翻訳方法(PTC、翻訳者、または自分で翻訳)を選択して送信します。
翻訳が完了すると、翻訳されたラベルがフロントエンドに自動的に表示されます。
ACFフィールドの選択肢の翻訳
選択肢フィールド(セレクト、チェックボックス、ラジオボタン、ボタングループ)には、独自のオプションラベル(例:小 / 中 / 大)が含まれます。これらも投稿の翻訳内ではなく、フィールドラベルと一緒に管理されます。同じ方法で送信してください。
- WPML > 翻訳 > ダッシュボードを開きます。
- ACF フィールドグループセクションを展開します。
- 選択肢の値を翻訳するフィールドグループを選択します。
- 翻訳方法を選択して送信します。
ACFオプションページの翻訳
ACFオプションページ(連絡先詳細、ヘッダー設定、フッターリンクなどのグローバル設定画面)は、投稿とは別に、独自のオブジェクトタイプとして翻訳されます。
- WPML > 翻訳 > ダッシュボードを開きます。
- ACF Optionsセクションを展開します。
- 翻訳するオプションページを選択します。
- 翻訳方法を選択して送信します。
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日