WPML
סטטוס
נפתר על ידי המפתח
נפתר בגרסה
BetterDocs 4.2.3
תוסף/ערכת עיצוב קשורים
BetterDocs
תגיות נושא
Compatibility

סקירה כללית של התקלה

בעת שימוש ב־BetterDocs עם WPML, ייתכן שתיתקל בבעיה הבאה: סידור מחדש של מסמכים באמצעות ממשק הגרירה והשחרור של BetterDocs גורם לשיוכי הקטגוריות להיות לא מסונכרנים בשפות משניות. כתוצאה מכך, מסמכים עשויים להיות משויכים באופן שגוי לקטגוריות משפות אחרות, והסדר החדש עשוי שלא להשתקף בתרגומים.

פתרון עוקף

אנא ודא שיש לך גיבוי מלא של האתר לפני שתמשיך.


  • פתח את הקובץ …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 );
            }
        }
    }
            

כל התקלות הידועות →