do_action( 'wpml_set_element_language_details', array $args )
- Tipo
- action
- Categoria
- Inserimento di contenuti
- Versione di WPML
- 3.2.7
Descrizione
L’hook di azione permette di impostare o aggiornare le informazioni sulla lingua di un elemento. Oltre al suo utilizzo più ovvio, l’hook può rivelarsi utile quando devi collegare due elementi impostandone uno come “Traduzione di” un altro. Consulta la sezione “Esempio di utilizzo dell’hook” di seguito per vederne un esempio.
Argomenti
- $args
- (array) (Obbligatorio) Un array di argomenti da utilizzare.
- element_id(bool) Usa term_taxonomy_id per le tassonomie, post_id per gli articoli
- element_type(string) Il tipo di un elemento. Può essere un tipo di post: post_post, post_page, post_attachment, post_nav_menu_item, post_{custom post key} o una tassonomia: tax_category, tax_post_tag, tax_nav_menu, tax_{custom taxonomy key}. Il valore predefinito è
post_postse non impostato. - trid(int) Il trid a cui deve essere assegnato l’elemento. Se impostato su
FALSE, creerà un nuovo trid per l’elemento, facendo scomparire eventuali relazioni di traduzione da/verso di esso. - language_code(string) Il codice della lingua per l’elemento
- source_language_code(string) Il codice della lingua di origine per l’elemento.
NULLè riservato agli elementi originali, ovvero agli elementi che non sono la traduzione di un altro. Il valore predefinito èNULLquando non impostato. - check_duplicates(bool) Il valore predefinito è
TRUE.. Questa opzione verifica se esiste già un altro elemento di tipo diverso con lo stesso ID e restituisce un avviso a livello di utente (E_USER_NOTICE) con il messaggio “Element ID already exists with a different type”
Esempio di utilizzo
Nell’esempio seguente, usiamo la funzione
my_insert_posts() per inserire due articoli dal front-end. Uno originale e una traduzione.
Questa funzione viene richiamata in element_connect_on_insert(). Questa è la nostra funzione principale che collegherà i due articoli tra loro. Nota l’uso di altri due utili hook di WPML all’interno. Il filtro wpml_element_type per filtrare il tipo di elemento in un valore comprensibile per WPML e il filtro wpml_element_language_details per recuperare il trid e il codice della lingua originali. Tutto questo si aggancia a wp_footer in modo che i nostri filtri e le nostre azioni vengano eseguiti quando il footer viene caricato sul front-end.
Esempio
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 );
}
}
Hook correlati
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