WPML
Status
Gelöst
Gemeldet für
WPML Multilingual CMS 3.1.9.5
Gelöst in
3.2

Übersicht über das Problem

Wenn eine oder mehrere übergeordnete Seiten verschiedene untergeordnete Seiten mit demselben Slug haben, leitet das Öffnen einer der untergeordneten Seiten auf die falsche Seite um.

Die Wiederverwendung eines Slugs in untergeordneten Seiten scheint eine falsche Weiterleitung im Frontend zu verursachen.

Beispiel:

  1. Seite A

    1. child-aa
    2. child-ab

  2. Seite B

    1. child-aa (eindeutige Seite, aber derselbe Slug wie 1.1)
    2. child-bb

Problemumgehung

Das Problem wird mit WPML 3.2 behoben.
In der Zwischenzeit können Sie die folgende Problemumgehung verwenden.

Bitte beachten Sie, dass dies nur mit duplizierten Unterseiten-Slugs funktioniert, solange die übergeordneten Seiten nicht denselben Namen wie die Unterseiten verwenden.


  1. Erstellen Sie ein vollständiges Backup Ihrer Website. Wenn möglich, testen Sie dies zuerst in einer Nicht-Produktionskopie Ihrer Website.

  2. Öffnen Sie sitepress.class.php

  3. Gehen Sie zu Zeile 7804: Diese sollte nur // Adjust page name enthalten

  4. Ersetzen Sie diesen Code-Block (Zeilen 7804 bis 7828:
    // Adjust page name
    if ( isset( $q->query_vars[ 'pagename' ] ) && !empty( $q->query_vars[ 'pagename' ] ) ) {
    	// find the page with the page name in the current language.
    	$pagename = explode ( '/', $q->query_vars[ 'pagename' ] );
    	$pagename = array_pop ( $pagename );
    	$pid = $wpdb->get_var( $wpdb->prepare( "
    					SELECT ID
    					FROM $wpdb->posts p
    					JOIN {$wpdb->prefix}icl_translations t
    					ON p.ID = t.element_id AND t.element_type='post_page'
    					WHERE p.post_name=%s AND t.language_code = %s
    					", $pagename, $current_language ) );
    	if ( $pid ) {
    		$q->query_vars[ 'page_id' ] = $pid;
    		// We have found the page id
    		unset( $q->query_vars[ 'pagename' ] );
    		if ( $q->query_vars[ 'page_id' ] == get_option( 'page_for_posts' ) ) {
    			// it's the blog page.
    			$q->is_page       = false; // $wp_query->is_page       = false;
    			$q->is_home       = true; // $wp_query->is_home       = true;
    			$q->is_posts_page = true; // $wp_query->is_posts_page = true;
    		}
    	}
    }

    Durch diesen Block:
    // Adjust page name
    if ( isset( $q->query_vars[ 'pagename' ] ) && !empty( $q->query_vars[ 'pagename' ] ) ) {
    	// find the page with the page name in the current language.
    	$pid = $wpdb->get_var( $wpdb->prepare( "
    					SELECT ID
    					FROM $wpdb->posts p
    					JOIN {$wpdb->prefix}icl_translations t
    					ON p.ID = t.element_id AND element_type='post_page'
    					WHERE p.post_name=%s AND t.language_code = %s
    					", $q->query_vars[ 'pagename' ], $current_language ) );
    	if ( $pid ) {
    		$q->query_vars[ 'page_id' ] = $pid;
    		// We have found the page id
    		unset( $q->query_vars[ 'pagename' ] );
    		if ( $q->query_vars[ 'page_id' ] == get_option( 'page_for_posts' ) ) {
    			// it's the blog page.
    			$q->is_page       = false; // $wp_query->is_page       = false;
    			$q->is_home       = true; // $wp_query->is_home       = true;
    			$q->is_posts_page = true; // $wp_query->is_posts_page = true;
    		}
    	}
    }
    

  5. Speichern Sie

  6. Laden Sie die Website neu

Alle bekannten Probleme →