Weiterleitung ModRewrite 301 von altem CMS zu WordPress – Teil 4

Teil 4: Das Programm zum Erzeugen der ModRewrite 301 Daten

Den Anfang unseres Tutorials verpasst? Hier geht es zum Teil 1.

Wir haben in unserem Fall das Problem, dass nicht für alle Artikel im CMS-Altsystem entsprechende Permalinks hinterlegt wurden. Diese Artikel müssen manuell geprüft werden. Diese müssen als Fehler in der Textdatei ausgegeben werden. Diese Fehlerdatei sollte nach dem ersten Lauf überprüft und gegebenenfalls die Permalinks in WordPress angepasst werden. So kann eine saubere Permalink-Struktur aufgebaut werden. Beachten sollte man nur: Wenn sich die Permalinks in WordPress ändern (original), muss ein neuer Dump der Tabelle „wp_posts“ auf das lokale System eingespielt werden.

Rubriken=Kategorien: Zuordnung der Kategorie in WordPress zum Artikel (Post)
Da in WordPress ein Artikel in mehreren Rubriken (Kategorien) erscheinen kann, haben die Entwickler die Zuordnung eines Artikels nicht in der Tabelle „wp_posts“ vorgenommen, sondern die zwei Tabellen „wp_terms“ und „wp_term_relationships“ ausgelagert. Daran ist per se nichts auszusetzen, macht unsere Arbeit an dieser Stelle nur ein wenig Aufwendiger. Es bedeutet für uns, dass wir in unserer lokalen SQL-DB auch diese beiden Tabellen kopieren müssen. Ein Join bei der Abfrage wird uns dann die korrekte Kategorie zum Artikel ermitteln, so dass wir die Ziel-URL (domain.de /kategorie/permalinks-mit-Bindestrich-getrennt.html) auch richtig schreiben können.

Ermitteln wir zuerst einmal alle WordPress-Artikel. Mit

SELECT id, post_name, post_title FROM wp_posts

erhalten wir alle relevanten Daten. In der Tabelle „wp_term_relationships“ finden wir die ID der  Kategorie (“term_taxonomy_id”), die wir per Join hinzufügen:

SELECT id, post_name, post_title, b.term_taxonomy_id FROM wp_posts as a
LEFT JOIN wp_term_relationships as b ON a.id=b.object_id

Nun haben wir die ID der Kategorie. Wir brauchen jedoch den Klarnamen der Kategorie. Ind er Tabelle „terms“ finden wir unsere Kategorien. Für uns interessant ist der „slug“, also nicht der Anzeigename, sondern der Wert der URL.

So lautet der SQL-Code für die Abfrage wie folgt:

SELECT a.id, b.object_id, c.slug FROM wp_posts as a
LEFT JOIN wp_term_relationships as b ON a.id=b.object_id
LEFT JOIN wp_terms as c ON b.term_taxonomy_id=c.term_id

Weiter zu Teil 5: Der C# Programmcode

Schreibe einen Kommentar