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),消息为“Element ID already exists with a different type”

使用示例

在下面的示例中,我们使用 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 个 插入内容 钩子 →