- ステータス
- 解決済み
- 報告対象
- WPML Multilingual CMS 3.1.9.5
- 解決されたバージョン
- 3.2
問題の概要
1つ以上の親ページに同じスラッグを持つ異なる子ページがある場合、その子ページの1つを開くと誤ったページにリダイレクトされます。
子ページでスラッグを再利用すると、フロントエンドで誤ったリダイレクトが引き起こされるようです。
例:
- ページA
- child-aa
- child-ab
- ページB
- child-aa(固有のページですが、1.1と同じスラッグ)
- child-bb
回避策
この問題はWPML 3.2で修正される予定です。
それまでの間は、以下の回避策を使用できます。
これは、親が子と同じ名前を使用していない場合に限り、複製された子スラッグでのみ機能することに注意してください。
- ウェブサイトの完全なバックアップを作成します。可能であれば、まずは本番環境ではないウェブサイトのコピーでこれをお試しください。
sitepress.class.phpを開きます。- 7804行目に移動します。ここには
// Adjust page nameのみが含まれているはずです。 - 7804行目から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; } } }
を、次のブロックに置き換えます:// 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; } } } - 保存します。
- ウェブサイトを再読み込みします。