Permalink-Struktur von CPT geändert – sollte ich redirect?

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?

AKTUALISIEREN

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 .

Solutions Collecting From Web of "Permalink-Struktur von CPT geändert – sollte ich redirect?"

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