Wordpress - Synchroniser les statuts de vos custom posts non pris en charge par WPML
Wordpress
[09/09/2020] Synchroniser les statuts de vos custom posts non pris en charge par WPML
Sync Post Status of Custom posts when not handled by wpml
On trouve beaucoup d'articles sur les forums de WPML où les demandeurs sont un peu dépités de voir toujours la même réponse du support qui leur annonce que cela n'est pas possible !!! (Ex: "At the moment, unfortunately, this is not possible. This is how WPML works at this moment").
Vous vous dîtes que s'il faut modifier à la main les 5 langues que vous avez par custom posts, vous allez y passer à chaque fois des "plombes".
Pas de panique, il y a une solution pour synchroniser automatiquement vos custom posts lorsque vous leur modifiez leurs statuts dans la première langue.
Voici une fonction qui fait l'affaire, à placer dans votre fichier de thème functions.php ou dans vos développements de plugins (Remplacez custompost par votre propre variable) :
Bon code ;-)
Vous vous dîtes que s'il faut modifier à la main les 5 langues que vous avez par custom posts, vous allez y passer à chaque fois des "plombes".
Pas de panique, il y a une solution pour synchroniser automatiquement vos custom posts lorsque vous leur modifiez leurs statuts dans la première langue.
Voici une fonction qui fait l'affaire, à placer dans votre fichier de thème functions.php ou dans vos développements de plugins (Remplacez custompost par votre propre variable) :
/*
* Sync Post status of Custom Posts when not handled by wpml
*/
add_action('save_post', 'my_sync_post_status', 10, 1);
function my_sync_post_status( $post_id ) {
global $wpdb, $sitepress;
# Initialize
$post = get_post( $post_id );
# only sync for your custom post
if ($post->post_type != 'custompost') {
return;
}
# Don't save for autosave
if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
return $post_id;
}
# Don't save for revisions
if (isset($post->post_type) && $post->post_type == 'revision') {
return $post_id;
}
# Don't sync deleted items
if ($post->post_status == 'trash') {
return;
}
# Only save translation if wpml is not synced anymore
$duplicate_status = apply_filters('wpml_element_translation_type', NULL, $post_id, 'custompost');
if ($duplicate_status == 1 ) {
# Get translation IDs
$trid = $sitepress->get_element_trid($post_id);
$translation = $sitepress->get_element_translations($trid);
# Update post_status for all translations except the current language
foreach( $translation as $language_code => $post_details ) {
if( ICL_LANGUAGE_CODE != $language_code ) {
$wpdb->update( $wpdb->prefix . 'posts', array( 'post_status' => $post->post_status ), array( 'ID' => $post_details->element_id ) );
}
}
}
}
Bon code ;-)