- Status
- Resolvido
- Relatado para
- WPML Multilingual CMS 3.3.6
Visão geral do problema
O complemento Repeater fornece um tipo de campo repetidor projetado para conter outros tipos de campo. Para que o usuário possa duplicar o conteúdo dentro de um repetidor, é necessário adicionar um snippet e adicionar cuidadosamente os nomes dos campos, conforme descrito na seção Solução alternativa.
Esse problema existe atualmente para os seguintes tipos de campo:
- imagem
- arquivo
- galeria
- taxonomia
- objeto de post
- link de página
NOTA: Você pode usar o snippet de código fornecido para todos os outros tipos de campo. A única diferença está no nome do campo. Isso significa que você pode usar esse snippet para resolver problemas com a duplicação tanto de tipos de campo repetidores quanto regulares.
Você pode encontrar a errata para esses tipos de campo aqui
Solução alternativa
Você pode usar este snippet no seu arquivo functions.php para que a duplicação funcione corretamente:
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 );
Observe que você deve substituir os nomes dos campos (‘taxonomy_field’, ‘repeater_field_0_repeater_taxonomy_field’ etc.) pelos do seu site. Siga os passos abaixo para fazer isso.
No exemplo acima, temos o seguinte em nosso grupo de campos:
– Um campo de taxonomia
– Um campo repetidor com um campo de taxonomia e outro campo repetidor “filho” com seu próprio campo de taxonomia.
Isso significa que o aninhamento fica assim:
Taxonomy
Repeater {
Taxonomy
Repeater Child {
Taxonomy
}
}
Isso significa que você precisa configurar seus campos de acordo com as suas necessidades, como fizemos no exemplo mostrado na imagem a seguir.
Quando você editar seu post, página ou qualquer tipo de post em que estiver usando seus campos personalizados, você verá esses campos em ação. A imagem a seguir mostra como isso fica em nosso exemplo:
NOTA: Você deve substituir os pares key =>; value do array pelos valores adequados.
Substitua as chaves do array:
Se você olhar atentamente para os nomes dos nossos campos como chaves, notará que os campos são indexados a partir de 0.
Isso significa que seu primeiro repetidor é 0, o segundo é 1 e assim por diante. Esses números de repetidor são separados de outros tipos de campos filhos por sublinhados com _0_, _1_, _2_…
Por exemplo, o nome do campo de taxonomia dentro do nosso primeiro repetidor é 'repeater_field_0_repeater_taxonomy_field', e esse é o nome que colocaremos no array do snippet acima. Certifique-se de focar em três coisas:
- Dentro de um array, como chaves, coloque todos os campos que você está usando e certifique-se de que sejam de um dos tipos listados abaixo
- O nome do campo está formatado corretamente
- O nome do campo é adicionado para cada linha do repetidor separadamente, ou seja, se você tiver 10 nomes de linhas do repetidor, ficará assim: 'repeater_field_0_some_custom_field', 'repeater_field_1_some_custom_field', 'repeater_field_2_some_custom_field' … até 'repeater_field_9_some_custom_field'.
Substitua os valores como: ‘some_taxonomy_name’, ‘some_other_taxonomy_name’ etc., de acordo. Este é o tipo de elemento ao qual o ID pertence. Pode ser post, page, attachment, {custom post type key}, nav_menu, nav_menu_item, category, post_tag, {custom taxonomy key}
Para saber mais, confira nossa documentação de hooks aqui.


