Nach dieser Antwort habe ich kürzlich die Permalink-Struktur eines benutzerdefinierten Beitragstyps namens “Literatur” geändert, um den Begriff der Taxonomie einzufügen:
Alte Struktur: mysite.com/literature/books/post_name
Neue Struktur: mysite.com/literature/fiction/post_name
Wenn Sie jedoch den ursprünglichen Permalink aufrufen, leitet WordPress ihn nicht automatisch um und beide Seiten erscheinen als separate Einträge in der Google-Suche.
Soll ich die alten Literaturpermalinks redirect? Wenn ja, was ist der beste Weg, dies zu tun?
Danke Brian, ich habe deinen Code wie folgt geändert und das funktioniert wie gewünscht:
add_action('parse_request', 'redirect_books_to_fiction', 0); function redirect_books_to_fiction(){ global $wp; if(preg_match('/literature\/books/', $wp->request)){ $redirect = get_bloginfo('siteurl').'/'.str_replace('books', get_the_term_list( $ID, 'literature_category', '', ' / ', '' ), $wp->request); wp_redirect($redirect, 301); exit; } }
Wie kann ich jedoch alles und nicht nur “Bücher” redirect?
Auf meinen literarischen Permalinks kann ich jedes Wort in die Spur eingeben und es wird nicht umgeleitet.
zB mysite.com/literature/any_random_word/post_name
Bleibt nur als dieser Permalink.
Wenn ich jedoch andere Seiten auf meiner Website besuche und den Pfad zu einem Beitrag ändere, wird automatisch auf den richtigen Permalink umgeleitet.
mysite.com/food/recipes/post_name
wenn ich ändere: mysite.com/food/recipes/post_name
zu: mysite.com/a_random_word/another_random_word/post_name
Es leitet zum richtigen Permalink um.
Ich nehme an, dass das wegen der benutzerdefinierten Permalink-Struktur ist, die ich in dieser Antwort verwendete
Hier ist die Seite .
Ich stimme zu, dass Sie eine Weiterleitung hinzufügen müssen. Sie können dies leicht mit der folgenden function tun. Ich bin mir sicher, dass Sie es ändern müssen, aber es ist ein guter Proof-of-Concept.
add_action('parse_request', 'redirect_books_to_fiction', 0); function redirect_books_to_fiction(){ global $wp; if(preg_match_all('~literature\/(.+)/(.+)?~', $wp->request, $matches)){ $redirect = get_bloginfo('siteurl').'/'.str_replace('books', 'fiction', $wp->request); wp_redirect($redirect, 301); exit; } }
Um weitere Fragen zu passenden Segmenten zu beantworten:
add_action('parse_request', 'redirect_cpts', 0); function redirect_cpts(){ $one_to_one = array( 'literature' => 'books', 'food' => 'foo', 'bar' => 'food' ); $request = $_SERVER['REQUEST_URI']; //We limit the scope of the regex to our specified CPTs so we don't hammer every request if(preg_match_all('~(literature|food|bar)/(.+)/(.+)?~', $request, $matches)){ if(!$one_to_one[$matches[1][0]]) return; $post_type = $one_to_one[$matches[1][0]]; //Do proper escaping $post_name = $matches[3][0]; //Do proper escaping if($post_name && $post_type){ global $wpdb; $post = $wpdb->get_row("SELECT * ID FROM $wpdb->posts WHERE post_type = '$post_type' AND post_name = '$post_name'"); $redirect = get_permalink($post); if($redirect){ wp_redirect($redirect, 301); exit; } } } }
Ich würde auch empfehlen, das Plugin Redirection als eine gute Möglichkeit zu betrachten, um Ihre geänderten URLs / Permalinks zu verwalten