WPML
الحالة
محلولة بواسطة المطور
تم حلها في
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 );
            }
        }
    }
            

جميع المشاكل المعروفة →