Eine WordPress-basierte Site zu pflegen, heißt oft, mit mehreren Instanzen zu arbeiten. Z.B. mit einer für die Entwicklung und einer für die Produktion. Beide haben ihre je eigene Domain. Ein spezifisches URL-Präfix, über das an vielen Stellen die Querverlinkung in der Site hergestellt wird. Dieses Präfix muss beim Wechsel von ‘Dev’ nach ‘Prod’ natürlich umgestellt werden. Manuell. Oder besser automatisch — mit einem Ersetzungsplugin. Oder eben mit Shortcodes, diesmal im Menü:
Lösung
- Installiere das Plugin
Shortcode in Menus
- Füge die folgenden Zeilen in Deine
functions.php
ein:
/*
* (c) 2023, Karsten Reincke
* SPDX-License-Identifier: MIT
*
* following some ideas of
* https://wordpress.org/support/topic/how-does-it-work-24/page/2/#post-4987738
*
*/
function myDomain_shortcode($atts) {
return get_site_url();
}
add_shortcode ( 'myDomain', 'myDomain_shortcode' );
- Verwende zukünftig im Link-Dialog einer Seite den String
https://karsten-reincke.de/myElement
, wenn Du sie mit myElement verlinken willst.
Hintergrund
Es gibt mehrere Methoden, die URL des Entwicklungssystems durch die andere URL zu ersetzen, gute und schlechte. Bei den guten, empfiehlt das Kapitel “Switch the domain name to the production name” das Plugin Go Live Update URLs. Es tut, was auch das Kommando cat mydevdump.sql | sed "s/http:\/\/devdomain/https:\/\/proddomain/g" > myprodump.sql
täte — wenn auch mit anderen Mitteln. Oder eben das Plugin Better Search Replace.
Die Herausforderung ist nur, dass frau dann dasselbe immer wieder tun muss. Jedes Mal, wenn sie etwas von der Entwicklungsumgebung in die Produktion bringen will. Das geht einfacher und nachhaltiger. Die Methode geht davon aus, …
- wir haben einen Entwicklungsrechner, auf dem wir an mehreren WordPress-Instanzen arbeiten.
- unsere Entwicklungsinstanzen liegen im HTTP-Root als ein Entwicklungsordner.1
- wir haben WordPress- und Site-Adresse einer jeden unserer Entwicklungsinstanz in den WordPress-Settings als
http://127.0.0.1/myDevDir
festgelegt - zu jeder Entwicklungsinstanz gibt es eine Produktionsinstanz mit anderen Angaben zu WordPress-Adresse und ‑Site .
Bisher komplettiert WordPress schon beim Anlegen eines Menü-Eintrages unsere Eingabe einmal mit dem, was wir in den Settings festgelegt haben. Also statisch. Jetzt soll das bei jedem Aufruf des Elements geschehen, also dynamisch. Dazu ersetzen wir in unseren WordPress-Seiten das feste URL-Prefix durch einen Shortcode. Die dazu definierte Funktion holt sich mit get_site_url()
den aktuellen Wert und ersetzt unseren Shortcode entsprechend.
Allerdings braucht es dazu die Hilfe des Plugins Shortcode in Menus. Dies sorgt dafür, dass Shortcodes auch in den Elementen auswertet werden, wo WordPress eine URL erwartet. Denn woher soll WordPress ohne Unterstützung wissen, dass eine bestimmte Zeichenfolge nicht genuiner Teil der URL ist. Glücklicherweise funktioniert diese Methode — anders als der Pluginname es erwarten ließe — auch in URLs außerhalb des Menüs.
Und so können wir unsere Posts und Seiten auf der Entwicklungsumgebung schreiben und sie direkt mittels der WordPress-Ex- und ‑Import-Tools von der Entwicklungsumgebung auf die Produktionsumgebung schieben.2
Im Übrigen: Männer sind mitgemeint.
Schade …
Unglücklicherweise funktioniert die Lösung nicht bei manuell gesetzten interne Links zu Site-eigenen Seiten. Der Verlinkungsdialog von Gutenberg stellt nämlich Einträgen ohne Protokollangabe ein https://
voran. Ungünstig, wenn der ShortCode https://karsten-reincke.de
- wie hier vorgeschlagen — selbst als https://irgendwas.de/
entfaltet wird. Die erste Lösung dafür macht Arbeit: Wir würden https://karsten-reincke.de als reine Domain definieren und bei jedem Menü-Eintrag und im Verlinkungsdialog das Protokoll manuell voranstellen. Die zweite Lösung hat ein Geschmäckle: Alternativ könnten wir im Verlinkungsdialog auf den ShortCode https://karsten-reincke.de
verzichten und das akzeptieren, was WordPress uns als Link anbietet. Dann müssten wir aber — nach der Migration eines Artikels aus der Entwicklung in die Produktion — doch wieder mit BetterSearchReplace o.Ä. jede Entwicklungsurl durch die Produktionsurl ersetzen lassen.
Was Ihr tun sollt? Keine Ahnung. Ich jedenfalls nehme die enttäuschende Lösung und spare mir damit Tipparbeit.
Und in welchem Zusammenhang …
… steht das mit unserer Migration zu bootScore? Nun, hat eine Web-Designerin die ersten Schritte auch in Sachen SEO getan, wird sie sich bald einem richtig dicken Brett zuwenden, nämlich ihrem Menü. Dabei muss sie thematische Cluster sauber gliedern und präsentieren, ohne zu fancy zu werden. Dann kann sie die Anzeige von festen und skalierbaren Bildern aufhübschen und beschleunigen. Über einen Teil dieser Etappe spricht auch dieser Post.
Im Übrigen: Männer sind mitgemeint.
- Entwickelt wird die Instanz also unter der URL
http://127.0.0.1/myDevDir
— oder wie auch immermyDevDir
real heißt. [↩] - Und wer es noch schlichter möchte, arbeitet mit basic-url-shortcodes [↩]