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