- الحالة
- محلولة بواسطة المطور
- تم حلها في
- BetterDocs 4.2.3
- الإضافة/القالب ذو الصلة
- BetterDocs
- وسوم الموضوع
- Compatibility
نظرة عامة على المشكلة
عند استخدام BetterDocs مع WPML، قد تواجه المشكلة التالية: تؤدي إعادة ترتيب Docs عبر واجهة السحب والإفلات في BetterDocs إلى جعل تعيينات الفئات غير متزامنة في اللغات الثانوية. نتيجةً لذلك، قد يتم تعيين Docs بشكل غير صحيح لفئات من لغات أخرى، وقد لا ينعكس الترتيب الجديد عبر الترجمات.
حل بديل مؤقت
يُرجى التأكد من أخذ نسخة احتياطية كاملة لموقعك قبل المتابعة.
- افتح الملف …wp-content/plugins/betterdocs/includes/Core/PostType.php.
- ابحث عن السطر 599.
- استبدل:
if ( update_term_meta( $term_id, '_docs_order', $docs_ordering_data ) ) { wp_send_json_success( __( 'Successfully updated.', 'betterdocs' ) ); } - بـ:
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' ) ); } - في نهاية الملف نفسه، قبل
}الأخير (حوالي السطر 1130). - أضف هذه الدالة المساعدة:
/** * 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 ); } } }