WPML
Status
Vom Autor gelöst
Gelöst in
BetterDocs 4.2.3
Zugehöriges Plugin/Theme
BetterDocs
Themen-Tags
Compatibility

Übersicht über das Problem

Wenn Sie BetterDocs mit WPML verwenden, kann folgendes Problem auftreten: Das Neuordnen von Docs über die Drag-and-Drop-UI von BetterDocs führt dazu, dass Kategoriezuweisungen in Sekundärsprachen desynchronisiert werden. Infolgedessen werden Docs möglicherweise fälschlicherweise Kategorien aus anderen Sprachen zugewiesen, und die neue Reihenfolge wird in den Übersetzungen eventuell nicht übernommen.

Problemumgehung

Bitte stellen Sie sicher, dass Sie über ein vollständiges Backup Ihrer Website verfügen, bevor Sie fortfahren.


  • Öffnen Sie die Datei …wp-content/plugins/betterdocs/includes/Core/PostType.php.

  • Suchen Sie nach Zeile 599.

  • Ersetzen Sie:
    if ( update_term_meta( $term_id, '_docs_order', $docs_ordering_data ) ) {
        wp_send_json_success( __( 'Successfully updated.', 'betterdocs' ) );
    }
            


  • Durch:
    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' ) );
    }
            


  • Am Ende derselben Datei, vor dem letzten } (ungefähr in Zeile 1130).

  • Fügen Sie diese Hilfsfunktion hinzu:
    /**
     * 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 );
            }
        }
    }
            

Alle bekannten Probleme →