Permalink unabhängig vom Namen des Beitrags in der database gespeichert

Ich versuche, eine benutzerdefinierte Permalink-Struktur für meine Posts zu erstellen.

www.example.com / post / %post_id% / %posttitle% / 

In diesem Permalink kommt zuerst die ID des Posts und danach der Titel des Posts.


Dinge, die ich bis jetzt kenne

postname wird normalerweise in der Tabelle wp_posts in der Zeile postname gespeichert und steuert die URL des post_name . post_name : Wenn der Post my-post-name des post_name my-post-name , lautet die Standard-URL www.example.com/post/my-post-name .

Post-Namen werden in der database so gespeichert, dass jeder Post einen eindeutigen Post-Namen hat. Wenn zwei Beiträge den gleichen Titel haben (z. B. new-advanced-topic ), wird der Name des ersten Posts new-advanced-topic und der Name des zweiten Posts new-advanced-topic-2 . Und so werden sich URLs voneinander unterscheiden.


Was ich möchte

Aber ich möchte nicht, dass die URL des Posts vom Namen des Posts abhängt, der in der database gespeichert ist.

Die Struktur, die ich möchte, ist ähnlich

 www.example.com / post / %post_id% / %posttitle% / 

Angenommen, in der database sind 2 Posts mit diesen Werten gespeichert

 ╔════╦════════════════════╦═════════════════════╗ ║ ID ║ post_title ║ post_name ║ ╠════╬════════════════════╬═════════════════════╣ ║ 25 ║ new-advanced-topic ║ new-advanced-topic ║ ║ 26 ║ new-advanced-topic ║ new-advanced-topic2 ║ ╚════╩════════════════════╩═════════════════════╝ 
  • Ich möchte, dass die URL des Beitrags nur von der ID des Beitrags abhängt. Wenn der Benutzer also www.example.com/post/25/pla-pla-pla angefordert hat, wird der angezeigte Beitrag derjenige sein, dessen ID 25 ist.
  • Wenn ein Nutzer den Link www.example.com/post/{%post_id%}/pla-pla-pla anfordert, möchte ich, dass WordPress ihn auf www.example.com/post/{%post_id%}/{%post_title%} umleitet www.example.com/post/{%post_id%}/{%post_title%} .

Wenn der Nutzer also www.example.com/post/25/pla-pla-pla anfordert, wird WordPress ihn auf www.example.com/post/25/new-advanced-topic redirect und den Beitrag mit der ID=25 anzeigen.

Und wenn der Nutzer www.example.com/post/26/new-advanced-topic2 anfordert, wird WordPress ihn auf www.example.com/post/26/new-advanced-topic redirect und den Beitrag mit der ID=26 anzeigen.

Und wenn der Benutzer www.example.com/post/100/new-advanced-topic anfordert, sollte ihm ein Fehler 404 angezeigt werden, da in der database kein Post mit ID=100 gespeichert ist.

Ich habe versucht, eine neue rewrite_rule zu schreiben, aber ich konnte keine Möglichkeit finden, die Regex zu schreiben.

Wie kann ich das mit den wp_rewrite Regeln machen wp_rewrite

Solutions Collecting From Web of "Permalink unabhängig vom Namen des Beitrags in der database gespeichert"

Wir müssen post_name eindeutig machen. Andernfalls könnte es viele Probleme verursachen. Wir können post_title mit post_title . Auf diese Weise können Sie Ihre URL schön und sauber halten, und Ihr post_name bleibt ebenfalls einzigartig.

Zuerst müssen wir eine benutzerdefinierte Permalink-Struktur schreiben.

 function my_awesome_permalink( $url, $post, $leavename ) { $url= trailingslashit( home_url('/post/'. $post->ID .'/'. sanitize_title($post->post_title) .'/' ) ); return $url; } add_filter( 'post_link', 'my_awesome_permalink', 10, 3 ); 

Jetzt ist unsere benutzerdefinierte Permalink-Struktur fertig. Es wird www.example.com/post/{%post_id%}/{%post_title%} zB: www.example.com/post/25/my-awesome-post-title . Wir müssen die richtige Rewrite-Regel hinzufügen, damit WP den richtigen Beitrag versteht und zurückgibt.

 add_action('generate_rewrite_rules', 'custom_rewrite_rules'); function custom_rewrite_rules( $wp_rewrite ) { $new_rules['^post/([0-9]+)/([^/]+)/?'] = 'index.php?p=$matches[1]'; $wp_rewrite->rules = $new_rules + $wp_rewrite->rules; return $wp_rewrite; } 

Mit dem obigen Code können Sie Ihre Post permalink-Struktur zu www.example.com/post/25/my-awesome-post-title und es wird den korrekten Beitrag www.example.com/post/25/my-awesome-post-title .

Ein Problem mit dem obigen Code ist, dass Post-Slugs nicht im Post-Editor bearbeitet werden können. Aber deine Post-URL kommt jetzt vom Posttitel, der editierbar ist!

Was ich verstehe, dass Sie Post-ID anstelle von Post-Titel verwenden möchten.

und Sie haben Probleme wegen des gleichen Titelnamens.

Wenn das stimmt, wird die Lösung wie folgt aussehen:

1 – Ändern Sie den Permalink in die benutzerdefinierte Struktur wie in der folgenden Abbildung

Bildbeschreibung hier eingeben

2 – gehen Sie zu phpmyadmin und ändern Sie den Namen Ihrer Beiträge wie in der folgenden Abbildung

Bildbeschreibung hier eingeben