2016-10-15 8 views
2

Meine Frage ähnelt Wordpress (Postname Permalink) 404 error aber es geht über die Frage hinaus.wordpress ändern permalink 404 Nachricht - 301 redirect

Ich habe einen Klienten,

und sie wollen es bewegen Permalink Struktur/Post-Name

jedoch die bestehenden Hunderte von Seiten in der Standard-Wordpress-Blog Struktur YYYY/MM/Post-Namen hat Links in Google und anderen Suchmaschinen müssen auf die richtige "neue" Seite umleiten, nicht auf eine 404 oder die Startseite.

Meine Frage ist, mit der neuesten Version von Wordpress (zum Zeitpunkt der Erstellung dieses 4.6.1) - wenn Sie einfach gehen in EINSTELLUNGEN> Permalinks> Post-Name wird es richtig funktionieren?

ODER

Haben Sie noch die .htaccess-Datei ändern müssen, so dass die ‚alte Seite‘ auf die neue Seite umgeleitet?

Wenn ja - wie lautet die korrekte .htaccess-Dateisyntax, so dass jeder neue Link eine 301-Weiterleitung ist, die der Suchmaschine mitteilt, dass die Seite dauerhaft verschoben wurde?

Vielen Dank!

siehe auch Wordpress Codex on Permalink Structure

Antwort

1

Sie können versuchen, diese in Ihrem .htaccess

RewriteEngine On 
Redirect 301 /YYYY/MM/post-name/ http://yoursite.com/post-name/ 

Und Sie können eine Datei enumerate.php alle Beiträge zur Liste genannt erstellen:

include "wp-load.php"; 

$posts = new WP_Query('post_type=any&posts_per_page=-1&post_status=publish'); 
$posts = $posts->posts; 

header('Content-type:text/plain'); 
foreach($posts as $post) { 
    switch ($post->post_type) { 
     case 'revision': 
     case 'nav_menu_item': 
      break; 
     case 'page': 
      $permalink = get_page_link($post->ID); 
      break; 
     case 'post': 
      $permalink = get_permalink($post->ID); 
      break; 
     case 'attachment': 
      $permalink = get_attachment_link($post->ID); 
      break; 
     default: 
      $permalink = get_post_permalink($post->ID); 
      break; 
    } 
    echo "\n{$permalink}"; 
    //echo "\n{$post->post_type}\t{$permalink}\t{$post->post_title}"; 
} 

aufzählen, über die WordPress Hauptordner und Sie erhalten die Liste, die Sie für die .htaccess Datei verwenden können.

2

Verwenden Sie diese Vorlage als Alternative in functions.php

add_action('template_redirect','check404'); 
function check404(){ 

    if (is_404()) { 

     $url = $_SERVER['REQUEST_URI']; 
     $url = esc_url_raw($url); 

     //FIND IF THERE IS A POST... 
     $e = explode("/", $url); 

     $reversed = array_reverse($e); 
     $number = $reversed[0]; 

     $link = get_permalink($number); 
     if(!empty($link)){ 
      wp_redirect($link, 301); 
      exit; 
     } 
     else 
      return; 
    } 

} 

Diese Umleitung wird die /YYYY/MM/post-name/ ->/Post-name/

+0

Tolle Ideen! functions.php ist innerhalb des individuellen Theme-Ordners, richtig? oder ist das eine globale Funktion? Wo würdest du den Befehl add_action ablegen? sagst du einfach den obigen Code zu Funktionen hinzufügen und es wird magisch funktionieren? Was wäre, wenn Sie in der URL auch "Kategorie", also Kategorie/Post-Name, hätten? – Viktor

+0

@Viktor, wenn Sie die Antwort mochten, und Sie finden, dass es nützlich ist, vergessen Sie nicht die Abstimmung. – prosti

+0

Prosti - danke. Ich werde es markieren, nachdem ich eine Chance hatte, es zu testen. Kannst du schnell auf meine Fragen antworten? Wie geht das?/category/postname/ – Viktor

1

Schließlich können Sie nur versuchen, die Permalink-Struktur zu aktualisieren :) , und versuchen Sie die alte URL.

Wenn etwas schief geht, können Sie zur alten Permalink-Struktur zurückkehren.