- Statut
- Résolu par l’auteur
- Résolu dans
- BetterDocs 4.2.3
- Extension/thème associé
- BetterDocs
- Étiquettes de sujet
- Compatibility
Aperçu de l’anomalie
Lorsque vous utilisez BetterDocs avec WPML, vous pouvez rencontrer le problème suivant : la réorganisation des Docs via l’interface de glisser-déposer de BetterDocs rend les attributions de catégories désynchronisées dans les langues secondaires. Par conséquent, les Docs peuvent être attribués de manière incorrecte à des catégories d’autres langues, et le nouvel ordre peut ne pas être reflété dans les traductions.
Solution de contournement
Veuillez vous assurer d’avoir une sauvegarde complète de votre site avant de continuer.
- Ouvrez le fichier …wp-content/plugins/betterdocs/includes/Core/PostType.php.
- Recherchez la ligne 599.
- Remplacez :
if ( update_term_meta( $term_id, '_docs_order', $docs_ordering_data ) ) { wp_send_json_success( __( 'Successfully updated.', 'betterdocs' ) ); } - Par :
if ( update_term_meta( $term_id, '_docs_order', $docs_ordering_data ) ) { // WPML Integration: Sync taxonomies after order change if ( class_exists( 'SitePress' ) && class_exists( 'WPML_Term_Translation_Utils' ) ) { $docs_array = isset( $_POST['docs_ordering_data'] ) && is_array( $_POST['docs_ordering_data'] ) ? array_map( 'intval', $_POST['docs_ordering_data'] ) : explode( ',', $docs_ordering_data ); $this->wpml_sync_posts_taxonomies( $docs_array ); } wp_send_json_success( __( 'Successfully updated.', 'betterdocs' ) ); } - À la fin du même fichier, avant le
}final (autour de la ligne 1130). - Ajoutez cette fonction d’aide :
/** * WPML Integration: Sync post taxonomies across translations * @param array $post_ids Array of post IDs to sync */ private function wpml_sync_posts_taxonomies( $post_ids ) { global $sitepress; if ( ! $sitepress || empty( $post_ids ) ) return; $sync = new WPML_Term_Translation_Utils( $sitepress ); foreach ( $post_ids as $post_id ) { $trid = $sitepress->get_element_trid( $post_id, 'post_docs' ); if ( ! $trid ) continue; $translations = $sitepress->get_element_translations( $trid, 'post_docs' ); $original_id = $post_id; foreach ( $translations as $translation ) { if ( isset( $translation->original ) && $translation->original == 1 ) { $original_id = $translation->element_id; break; } } foreach ( $sitepress->get_active_languages() as $lang => $details ) { $sync->sync_terms( $original_id, $lang ); } } }