WPML
do_action( 'wpml_set_element_language_details', array $args )
Тип
action
Категория
Вставка контента
Версия WPML
3.2.7

Описание

Хук действия позволяет задать или обновить информацию о языке элемента. Помимо своего прямого назначения, этот хук может оказаться полезным, когда необходимо связать два элемента, сделав один «Переводом» другого. См. пример в разделе «Пример использования хука» ниже.

Аргументы

$args
(array) (Обязательно) Массив используемых аргументов.
  • element_id(bool) Используйте term_taxonomy_id для таксономий, post_id для записей
  • element_type(string) Тип элемента. Может быть типом записи: post_post, post_page, post_attachment, post_nav_menu_item, post_{custom post key} или таксономией: tax_category, tax_post_tag, tax_nav_menu, tax_{custom taxonomy key}. По умолчанию post_post, если не задано.
  • trid(int) Значение trid, которое должно быть назначено элементу. Если задано FALSE, для элемента будет создан новый trid, что приведет к исчезновению любых потенциальных связей перевода с ним.
  • language_code(string) Код языка для элемента
  • source_language_code(string) Код исходного языка для элемента. Значение NULL зарезервировано для оригинальных элементов, то есть элементов, которые не являются переводом других. По умолчанию NULL, если не задано.
  • check_duplicates(bool) По умолчанию TRUE.. Этот параметр проверяет, существует ли уже другой элемент другого типа с таким же ID, и выводит пользовательское уведомление (E_USER_NOTICE) с сообщением «Идентификатор элемента уже существует с другим типом»

Пример использования

В примере ниже мы используем функцию my_insert_posts() для добавления двух записей с фронтенда. Одна — оригинал, а вторая — перевод. Эта функция вызывается в element_connect_on_insert(). Это наша основная функция, которая свяжет две записи вместе. Обратите внимание на использование внутри двух других полезных хуков WPML. Фильтр wpml_element_type для фильтрации типа элемента до значения, понятного WPML, и фильтр wpml_element_language_details для получения оригинального trid и кода языка. Всё это привязывается к wp_footer, поэтому наши фильтры и действия сработают при загрузке подвала на фронтенде. Пример
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

Все хуки категории «Вставка контента» (10) →