WordPressの便利なプラグインである、
非常に直感的に多言語サイトが作れる多言語化プラグイン「Bogo」と、
設定したカスタムフィールドを必要に応じて繰り返し使える機能が無料で使える
カスタムフィールド作成プラグイン「Smart Custom Fields」ですが、
併用した場合に、固定ページを複製した翻訳ページへは、
管理画面からSmart Custom Fieldsで設定したカスタムフィールドを設定することができません。
(※カスタム投稿タイプ、および通常の投稿ページの翻訳ページには、元の投稿に設定されたカスタムフィールドがそのまま反映されます)
固定ページを作成
Smart Custom Fieldsでカスタムフィールドを作成、固定ページへ設定
投稿/固定ページのIDの候補に作成した固定ページが表示される
固定ページに設定したカスタムフィールドが表示される
固定ページを複製
Bogoの機能で「言語」タブが追加されている
「英語の翻訳を作成」をクリック
複製された翻訳の固定ページに、カスタムフィールドがない
Smart Custom Fieldsの設定候補に出てこない
対策
管理画面での設定をあきらめ、functions.phpでの設定を行います。
翻訳ページの投稿IDを直接指定して、カスタムフィールドを表示するようにします。
functions.phpでの設定方法については、Smart Custom Fieldsのプラグインページの他、以下のURLが参考になります。
https://qiita.com/yousan/items/7cbd56308ecc0e2bb263
まずは翻訳ページの投稿IDを取得します。
翻訳ページの編集画面を開き、そのページのURLを見ると投稿IDがわかります。
(?post=〇〇の部分)
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);
設定後の翻訳元ページ
設定後の翻訳ページ
翻訳ページにも設定したカスタムフィールドが表示された
翻訳元の投稿IDも同時に指定すれば管理が楽になります。
また、独自テンプレートを作成している場合は、
functions.phpでの指定にすることでGit等でも管理できるので開発上便利ですね。