Hier wird gerade ein neues WordPress-Blog gebaut, mit diversen Testinstallationen und der gerade erschienenen WordPress-Version 2.0.4..
Wie immer steckt die Tücke im Detail. So habe ich mir beim Umschreiben der WordPress-URLs heute selbst ein Bein gestellt, kurz:
Wer dies will: „/blog-%post_id%-%postname%.html“ muss im Normalfall mit einer verlängerten WordPress-URL (date/…) in den Archiven leben!
Ich wollte das Datum meiner Beiträge gegen die ID-Nummer ersetzen, um die Wordpress-URLs zu verkürzen. Klar, ich hätte die ID-Nummer auch noch weglassen können, müsste dann aber in Zukunft immer darauf achten, dass zwei Beiträge nicht irgendwann versehentlich einmal die gleiche Überschrift erhalten. Wegen der Eindeutigkeit eines WordPress-Eintrags brauche ich also entweder eine eindeutige ID-Nummer oder halt das Datum, zu dem ich, wie es aussieht, nun zurückkehren muss.
Nachdem ich das Datum der WordPress-URL gegen die „post_id“ ausgetauscht hatte, entdeckte ich bei meinen Archiv-Links plötzlich eine unerklärliche URL-Erweiterung. Die WordPress-Archiv-URLs wurden automatisch mit der Pfaderweiterung „date/“ verlängert, die ich natürlich nicht haben wollte.
Was ich nicht wusste: WordPress hat in der Datei classes.php eine Sicherheitsschleife integriert, die wie folgt aussieht:
// Do not allow the date tags and %post_id% to overlap in the permalink structure. If they do, move the date tags to $front/date/.
$front = $this->front;
preg_match_all('/%.+?%/', $this->permalink_structure, $tokens);
$tok_index = 1;
foreach ($tokens[0] as $token) {
if ( ($token == '%post_id%') && ($tok_index <= 3) ) {
$front = $front . 'date/';
break;
}
}
So wird wohl verhindert, dass es bei mod_rewrite – Einsatz zu Überschneidungen und somit zu fehlerhafter Auslieferung von Seiten kommt. Dies muss man natürlich wissen. 😉
Nächste Woche werde ich noch nach einer Lösung suchen, um aus den Archiv-URLs „/Jahr/Monat/Tag/“ dies hier zu machen: „/Jahr-Monat-Tag/“. Falls jemand schon eine Lösung hat, würde ich mich über den Lösungsweg freuen. Sicher handelt es sich auch hier nur um eine kleine Modifikation in der „classes.php“. Erste Tests meinerseits führten hier jedoch zu Systemfehlern. 😉