WPML

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

Este problema foi corrigido. Atualizar para a versão mais recente resolve isso no seu site, portanto, você só precisa desta solução alternativa se ainda não puder atualizar.

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.

image04

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:

image03

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:

  1. 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
  2. O nome do campo está formatado corretamente
  3. 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'.
Além disso, você pode encontrar todos os nomes de campos presentes em “Configuração de conteúdo multilíngue” se olhar abaixo dos seus campos do Advanced Custom Fields e do editor WYSIWYG após o seu post ser salvo, como mostrado na imagem a seguir.

image05

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.

Todos os problemas conhecidos

Ainda está vendo este problema?

Se a atualização não resolver, envie uma dúvida de suporte e nós vamos analisar isso com você.