WPML
Estado
Resuelto
Notificado para
WPML Multilingual CMS 3.3.6

Resumen del problema

El complemento Repeater proporciona un tipo de campo repetidor que está diseñado para contener otros tipos de campo. Para que el usuario pueda duplicar el contenido dentro de un repetidor, es necesario añadir un fragmento de código y añadir cuidadosamente los nombres de los campos como se describe en la sección Solución alternativa.

Este problema existe actualmente para los siguientes tipos de campo:

- imagen

- archivo

- galería

- taxonomía

- objeto de entrada

- enlace de página

NOTA: Puede usar el fragmento de código proporcionado para todos los demás tipos de campo. La única diferencia está en el nombre del campo. Esto significa que puede usar este fragmento de código para resolver problemas con la duplicación tanto de los tipos de campo repetidor como de los normales.

Puede encontrar las erratas para estos tipos de campo aquí

Solución alternativa

Puede usar este fragmento de código en su archivo functions.php para que la duplicación funcione correctamente:

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 );

Tenga en cuenta que debe reemplazar los nombres de los campos («taxonomy_field», «repeater_field_0_repeater_taxonomy_field», etc.) por los de su sitio. Siga estos pasos para hacerlo.

En el ejemplo anterior, tenemos lo siguiente en nuestro grupo de campos:

– Un campo de taxonomía

– Un campo repetidor con un campo de taxonomía y otro campo repetidor «hijo» con su propio campo de taxonomía.

Esto significa que el anidamiento se ve así:

Taxonomy
Repeater {
         Taxonomy
         Repeater Child { 
                        Taxonomy 
         }
}

Esto significa que debe configurar sus campos según sus necesidades, tal como hicimos en el ejemplo que se muestra en la siguiente imagen.

image04

Cuando edite su entrada, página o cualquier tipo de contenido en el que esté usando sus campos personalizados, verá esos campos en acción. La siguiente imagen muestra cómo se ve esto en nuestro ejemplo:

image03

NOTA: Debe reemplazar los pares de clave =>; valor del array con los valores adecuados.

Reemplace las claves del array:

Si observa detenidamente nuestros nombres de campos como claves, notará que los campos están indexados desde 0.

Esto significa que su primer repetidor es 0, el segundo es 1 y así sucesivamente. Esos números de repetidor están separados con guiones bajos de otros tipos de campos hijos con _0_, _1_, _2_

Por ejemplo, el nombre del campo de taxonomía dentro de nuestro primer repetidor es 'repeater_field_0_repeater_taxonomy_field', y ese es el nombre que pondremos en el array del fragmento de código anterior. Asegúrese de centrarse en tres cosas:


  1. Dentro de un array, como claves, ponga cada campo que esté usando y asegúrese de que sea de uno de los tipos que se enumeran a continuación

  2. El nombre del campo tiene el formato correcto

  3. El nombre del campo se añade para cada fila del repetidor por separado, es decir, si tiene 10 nombres de filas de repetidor, será de la siguiente manera: 'repeater_field_0_some_custom_field', 'repeater_field_1_some_custom_field', 'repeater_field_2_some_custom_field' … hasta llegar a 'repeater_field_9_some_custom_field'.
Además, puede encontrar todos los nombres de los campos presentes en «Configuración del contenido multilingüe» si mira debajo de sus campos de Advanced Custom Fields y del editor WYSIWYG después de guardar su entrada, como se muestra en la siguiente imagen.

image05

Reemplace los valores como: «some_taxonomy_name», «some_other_taxonomy_name», etc., según corresponda. Este es el tipo de elemento al que pertenece el ID. Puede ser post, page, attachment, {custom post type key}, nav_menu, nav_menu_item, category, post_tag, {custom taxonomy key}

Para obtener más información, consulte nuestra documentación sobre el hook aquí.

Todos los problemas conocidos →