- ステータス
- 解決済み
- 報告対象
- WPML Multilingual CMS 3.3.6
問題の概要
Repeaterアドオンは、他のフィールドタイプを含めるように設計されたリピーターフィールドタイプを提供します。ユーザーがリピーター内のコンテンツを複製できるようにするには、スニペットを追加し、「回避策」セクションで説明されているようにフィールド名を慎重に追加する必要があります。
この問題は現在、以下のフィールドタイプで発生しています:
- 画像
- ファイル
- ギャラリー
- タクソノミー
- 投稿オブジェクト
- ページリンク
注:提供されているコードスニペットは、他のすべてのフィールドタイプに使用できます。唯一の違いはフィールド名です。つまり、このスニペットを使用することで、リピーターと通常のフィールドタイプの両方の複製に関する問題を解決できます。
これらのフィールドタイプのエラッタについては、こちらをご覧ください。
回避策
複製が正常に機能するように、functions.phpファイルで以下のスニペットを使用できます。
function wpml_fix_acf_duplication( $value_to_filter, $target_language, $meta_data ) {
// Field names should be placed into following array.
$fields = array(
'taxonomy_field' => 'some_taxonomy_name',
'repeater_field_0_repeater_taxonomy_field' => 'some_other_taxonomy_name',
'repeater_field_1_repeater_taxonomy_field' => 'some_other_taxonomy_name',
'repeater_field_0_repeater_child_0_repeater_child_taxonomy_field' => 'some_other_taxonomy_name',
'repeater_field_0_repeater_child_1_repeater_child_taxonomy_field' => 'some_other_taxonomy_name',
'repeater_field_1_repeater_child_0_repeater_child_taxonomy_field' => 'some_other_taxonomy_name',
'repeater_field_1_repeater_child_1_repeater_child_taxonomy_field' => 'some_other_taxonomy_name'
);
if ( array_key_exists( $meta_data['key'], $fields ) ) {
$value = maybe_unserialize( $value_to_filter );
if ( is_array( $value ) ) {
// If custom field value contain array of IDs to translate, usually used for gallery and taxonomy field types.
$translated_ids = array();
foreach ( $value as $v ) {
$translated_ids[] = apply_filters( 'wpml_object_id', $v, $fields[ $meta_data['key'] ], true, $target_language );
}
return maybe_serialize( $translated_ids );
} else {
// If custom field value contain single ID to translate, usually used for image and file field types.
$translated_id = apply_filters( 'wpml_object_id', $value, $fields[ $meta_data['key'] ], true, $target_language );
return $translated_id;
}
}
return $value_to_filter;
}
add_filter( 'wpml_duplicate_generic_string', 'wpml_fix_acf_duplication', 999, 3 );
フィールド名('taxonomy_field’、'repeater_field_0_repeater_taxonomy_field’など)は、お使いのサイトのものに置き換える必要があることに注意してください。これを行うには、以下の手順に従います。
上記の例では、フィールドグループに以下が含まれています。
– 1つのタクソノミーフィールド
– タクソノミーフィールドを持つ1つのリピーターフィールドと、独自のタクソノミーフィールドを持つ別の「子」リピーターフィールド
これは、ネストが以下のようになることを意味します。
Taxonomy
Repeater {
Taxonomy
Repeater Child {
Taxonomy
}
}
つまり、次の画像の例のように、ニーズに合わせてフィールドを設定する必要があります。
投稿、固定ページ、またはカスタムフィールドを使用している任意の投稿タイプを編集すると、これらのフィールドが実際に機能していることを確認できます。次の画像は、この例での表示を示しています。
注意:配列のkey =>; valueペアは、適切な値に置き換える必要があります。
配列のキーの置き換え:
キーとしてのフィールド名をよく見ると、フィールドのインデックスが0から始まっていることがわかります。
つまり、最初のリピーターは0、2番目は1のようになります。これらのリピーター番号は、アンダースコアで他の子フィールドタイプから区切られ、_0_、_1_、_2_…のようになります。
たとえば、最初のリピーター内のタクソノミーフィールドの名前は'repeater_field_0_repeater_taxonomy_field'であり、これが上記のスニペット配列に入力する名前です。以下の3つの点に注意してください。
- 配列内のキーとして、使用しているすべてのフィールドを入力し、以下のリストにあるタイプのいずれかであることを確認します。
- フィールド名が正しくフォーマットされていることを確認します。
- フィールド名が各リピーター行に個別に追加されていることを確認します。たとえば、10個のリピーター行の名前がある場合、次のようになります。'repeater_field_0_some_custom_field'、'repeater_field_1_some_custom_field'、'repeater_field_2_some_custom_field'… 最後は'repeater_field_9_some_custom_field'まで続きます。
必要に応じて、'some_taxonomy_name’、'some_other_taxonomy_name’などの値を置き換えます。これは、IDが属する要素のタイプです。以下のいずれかになります。post、page、attachment、{カスタム投稿タイプのキー}、nav_menu、nav_menu_item、category、post_tag、{カスタムタクソノミーのキー}
詳細については、こちらのフックのドキュメントを確認してください。


