WPML
do_action( 'wpml_set_element_language_details', array $args )
Tipo
action
Categoría
Insertar contenido
Versión de WPML
3.2.7

Descripción

El hook de acción permite establecer o actualizar la información de idioma de un elemento. Además de su uso directo e implícito, el hook puede resultar útil cuando se necesita conectar dos elementos para que uno sea la «Traducción de» otro. Consulte la sección «Ejemplo de uso del hook» a continuación para ver un ejemplo de esto.

Argumentos

$args
(array) (Obligatorio) Un array de argumentos que se utilizarán.
  • element_id(bool) Utilice term_taxonomy_id para taxonomías, post_id para entradas
  • element_type(string) El tipo de un elemento. Puede ser un tipo de contenido: post_post, post_page, post_attachment, post_nav_menu_item, post_{custom post key} o una taxonomía: tax_category, tax_post_tag, tax_nav_menu, tax_{custom taxonomy key}. De forma predeterminada es post_post si no se establece.
  • trid(int) El trid al que se asignará el elemento. Si se establece en FALSE, creará un nuevo trid para el elemento, lo que hará que desaparezca cualquier posible relación de traducción hacia o desde él.
  • language_code(string) El código de idioma para el elemento
  • source_language_code(string) El código de idioma de origen para el elemento. NULL está reservado para los elementos originales, es decir, elementos que no son una traducción de otro. De forma predeterminada es NULL cuando no se establece.
  • check_duplicates(bool) De forma predeterminada es TRUE.. Lo que hace esto es comprobar si ya existe otro elemento de un tipo diferente con el mismo ID y emite un aviso a nivel de usuario (E_USER_NOTICE) con el mensaje «Element ID already exists with a different type»

Ejemplo de uso

En el siguiente ejemplo, utilizamos la función my_insert_posts() para insertar dos entradas desde el front-end. Una original y una traducción. Esta función se llama en element_connect_on_insert(). Esta es nuestra función principal que conectará las dos entradas entre sí. Observe el uso de otros dos hooks útiles de WPML en su interior. El filtro wpml_element_type para filtrar el tipo de elemento a un valor que WPML entienda y el filtro wpml_element_language_details para recuperar el trid original y el código de idioma. Todo esto se asocia a wp_footer para que nuestros filtros y acciones se ejecuten cuando el pie de página se cargue en el front-end. Ejemplo
add_action('wp_footer', 'element_connect_on_insert');

function my_insert_posts() {
	$output = array();

	// Create original post object
	$my_original_post = array(
		'post_title'    => 'My original post',
		'post_content'  => 'This is my original post.',
		'post_status'   => 'publish',
		'post_author'   => 1,
		'post_category' => array(1)
	);

	// Create translation post object
	$my_translated_post = array(
		'post_title'    => 'My translated post',
		'post_content'  => 'This is my translated post.',
		'post_status'   => 'publish',
		'post_author'   => 1,
		'post_category' => array(2) // NOTE: this is the translated category id!
	);

	// Insert the 2 posts into the database
	$original_post_id = wp_insert_post( $my_original_post );
	$translated_post_id = wp_insert_post( $my_translated_post );

	return $output = array(
		'original' => $original_post_id,
		'translation' => $translated_post_id
	);
}


function element_connect_on_insert() {
	$inserted_post_ids = my_insert_posts();

	if ( $inserted_post_ids) {
		// https://wpml.org/wpml-hook/wpml_element_type/
		$wpml_element_type = apply_filters( 'wpml_element_type', 'post' );
		
		// get the language info of the original post
		// https://wpml.org/wpml-hook/wpml_element_language_details/
		$get_language_args = array('element_id' => $inserted_post_ids['original'], 'element_type' => 'post' );
		$original_post_language_info = apply_filters( 'wpml_element_language_details', null, $get_language_args );
		
		$set_language_args = array(
			'element_id'    => $inserted_post_ids['translation'],
			'element_type'  => $wpml_element_type,
			'trid'   => $original_post_language_info->trid,
			'language_code'   => 'de',
			'source_language_code' => $original_post_language_info->language_code
		);

		do_action( 'wpml_set_element_language_details', $set_language_args );
	}
}

wpml_make_post_duplicates, wpml_admin_make_post_duplicates, wpml_copy_post_to_language, wpml_delete_package, wpml_import_get_trid_from_imported_translations, wpml_register_string, wpml_register_single_string, wpml_show_package_language_ui, wpml_delete_package_action

Los 10 hooks de Insertar contenido →