WordPressのSmart Custom Fieldsが、多言語サイト作成プラグインBogoで翻訳した固定ページに設定できない件の対策

WordPressの便利なプラグインである、
非常に直感的に多言語サイトが作れる多言語化プラグイン「<a href="https://ja.wordpress.org/plugins/bogo/" target="_blank">Bogo</a>」と、
設定したカスタムフィールドを必要に応じて繰り返し使える機能が無料で使える
カスタムフィールド作成プラグイン「<a href="https://ja.wordpress.org/plugins/smart-custom-fields/" target="_blank">Smart Custom Fields</a>」ですが、
併用した場合に、固定ページを複製した翻訳ページへは、
管理画面からSmart Custom Fieldsで設定したカスタムフィールドを設定することができません。
（※カスタム投稿タイプ、および通常の投稿ページの翻訳ページには、元の投稿に設定されたカスタムフィールドがそのまま反映されます）

###### 固定ページを作成
![スクリーンショット 2024-09-11 23.17.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3859292/4c5d3b1b-fc06-92f4-2834-af6f3b64e2a8.png)

###### Smart Custom Fieldsでカスタムフィールドを作成、固定ページへ設定
:::note info
投稿/固定ページのIDの候補に作成した固定ページが表示される
:::
![スクリーンショット 2024-09-11 23.17.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3859292/76c1ebaf-743e-c2fb-9acc-8a33b2761546.png)

:::note info
固定ページに設定したカスタムフィールドが表示される
:::
![スクリーンショット 2024-09-11 23.40.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3859292/65ddd8db-f63f-cdee-5e7c-70f373efdf5e.png)


###### 固定ページを複製
:::note warn
Bogoの機能で「言語」タブが追加されている
「英語の翻訳を作成」をクリック
:::
![スクリーンショット 2024-09-11 23.21.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3859292/4804f710-9b07-063b-54ef-d94bd907aafe.png)

:::note warn
複製された翻訳の固定ページに、カスタムフィールドがない
:::
![スクリーンショット 2024-09-11 23.21.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3859292/22bba5c9-6636-a045-f020-751a5330eb15.png)

:::note warn
Smart Custom Fieldsの設定候補に出てこない
:::
![スクリーンショット 2024-09-11 23.20.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3859292/21ac3c14-2bb3-03d4-6da1-556f8a4b6278.png)

## 対策
管理画面での設定をあきらめ、functions.phpでの設定を行います。
翻訳ページの投稿IDを直接指定して、カスタムフィールドを表示するようにします。
functions.phpでの設定方法については、Smart Custom Fieldsのプラグインページの他、以下のURLが参考になります。
https://qiita.com/yousan/items/7cbd56308ecc0e2bb263
　 
まずは翻訳ページの投稿IDを取得します。
翻訳ページの編集画面を開き、そのページのURLを見ると投稿IDがわかります。
（?post=〇〇の部分）
![スクリーンショット 2024-09-16 22.57.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3859292/bab0bfaa-ccbc-5275-9e08-7df7b64c753b.png)
　
functions.phpでの設定例は以下の通り。
```functions.php
/**
 * カスタムフィールドを定義
 * 
 * @param  array  $settings  Smart_Custom_Fields_Setting オブジェクトの配列
 * @param  string $type      投稿タイプ or ロール
 * @param  int    $id        投稿ID or ユーザーID
 * @param  string $meta_type post | user
 * @return array
 */
function my_register_fields($settings, $type, $id, $meta_type)
{
    // $idが翻訳元ページ（id=7）、もしくは翻訳ページ（id=15）のときに表示するカスタムフィールド
    if ($id == 7 || $id == 15) {
        $setting = SCF::add_setting('id-test1', 'テスト用フィールド');

        $items = array(
            array(
                'name'  => 'textfield',
                'label' => 'テスト',
                'type'  => 'text'
            ),
        );

        $setting->add_group('group-test1', false, $items);
        $settings[] = $setting;
    }

	return $settings;
}
add_filter('smart-cf-register-fields', 'my_register_fields', 10, 4);
```
　
###### 設定後の翻訳元ページ
![スクリーンショット 2024-09-16 23.12.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3859292/cf8ff841-ffab-7b4f-d1aa-bba32f27a9d7.png)

###### 設定後の翻訳ページ
![スクリーンショット 2024-09-16 23.12.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3859292/b2b7db95-0005-c9dd-bc8c-44a81fb300ef.png)

:::note info
翻訳ページにも設定したカスタムフィールドが表示された
:::
　
翻訳元の投稿IDも同時に指定すれば管理が楽になります。
また、独自テンプレートを作成している場合は、
functions.phpでの指定にすることでGit等でも管理できるので開発上便利ですね。