Open-Source Web-Design

Shortcodes im Menü — für das bessere ‘Staging’

Ein Shortcut durch einen Friseur

Eine Word­Press-basier­te Site zu pfle­gen, heißt oft, mit meh­re­ren Instan­zen zu arbei­ten. Z.B. mit einer für die Ent­wick­lung und einer für die Pro­duk­ti­on. Bei­de haben ihre je eige­ne Domain. Ein spe­zi­fi­sches URL-Prä­fix, über das an vie­len Stel­len die Quer­ver­lin­kung in der Site her­ge­stellt wird. Die­ses Prä­fix muss beim Wech­sel von ‘Dev’ nach ‘Prod’ natür­lich umge­stellt wer­den. Manu­ell. Oder bes­ser auto­ma­tisch — mit einem Erset­zungs­plug­in. Oder eben mit Short­codes, dies­mal im Menü:

[ de | en ]

Lösung

  • Instal­lie­re das Plug­in Shortcode in Menus
  • Füge die fol­gen­den Zei­len in Dei­ne 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' );
  • Ver­wen­de zukünf­tig im Link-Dia­log einer Sei­te den String https://karsten-reincke.de/myElement, wenn Du sie mit myEle­ment ver­lin­ken willst.

Hintergrund

Es gibt meh­re­re Metho­den, die URL des Ent­wick­lungs­sys­tems durch die ande­re URL zu erset­zen, gute und schlech­te. Bei den guten, emp­fiehlt das Kapi­tel “Switch the domain name to the pro­duc­tion name” das Plug­in Go Live Update URLs. Es tut, was auch das Kom­man­do cat mydevdump.sql | sed "s/http:\/\/devdomain/https:\/\/proddomain/g" > myprodump.sql täte — wenn auch mit ande­ren Mit­teln. Oder eben das Plug­in Bet­ter Search Replace.

Die Her­aus­for­de­rung ist nur, dass frau dann das­sel­be immer wie­der tun muss. Jedes Mal, wenn sie etwas von der Ent­wick­lungs­um­ge­bung in die Pro­duk­ti­on brin­gen will. Das geht ein­fa­cher und nach­hal­ti­ger. Die Metho­de geht davon aus, …

  • wir haben einen Ent­wick­lungs­rech­ner, auf dem wir an meh­re­ren Word­Press-Instan­zen arbei­ten.
  • unse­re Ent­wick­lungs­in­stan­zen lie­gen im HTTP-Root als ein Ent­wick­lungs­ord­ner. 1
  • wir haben Word­Press- und Site-Adres­se einer jeden unse­rer Ent­wick­lungs­in­stanz in den Word­Press-Set­tings als http://127.0.0.1/myDevDir fest­ge­legt
  • zu jeder Ent­wick­lungs­in­stanz gibt es eine Pro­duk­ti­ons­in­stanz mit ande­ren Anga­ben zu Word­Press-Adres­se und ‑Site .

Bis­her kom­plet­tiert Word­Press schon beim Anle­gen eines Menü-Ein­tra­ges unse­re Ein­ga­be ein­mal mit dem, was wir in den Set­tings fest­ge­legt haben. Also sta­tisch. Jetzt soll das bei jedem Auf­ruf des Ele­ments gesche­hen, also dyna­misch. Dazu erset­zen wir in unse­ren Word­Press-Sei­ten das fes­te URL-Pre­fix durch einen Short­code. Die dazu defi­nier­te Funk­ti­on holt sich mit get_site_url() den aktu­el­len Wert und ersetzt unse­ren Short­code ent­spre­chend.

Aller­dings braucht es dazu die Hil­fe des Plug­ins Short­code in Menus. Dies sorgt dafür, dass Short­codes auch in den Ele­men­ten aus­wer­tet wer­den, wo Word­Press eine URL erwar­tet. Denn woher soll Word­Press ohne Unter­stüt­zung wis­sen, dass eine bestimm­te Zei­chen­fol­ge nicht genui­ner Teil der URL ist. Glück­li­cher­wei­se funk­tio­niert die­se Metho­de — anders als der Plug­in­na­me es erwar­ten lie­ße — auch in URLs außer­halb des Menüs.

Und so kön­nen wir unse­re Posts und Sei­ten auf der Ent­wick­lungs­um­ge­bung schrei­ben und sie direkt mit­tels der Word­Press-Ex- und ‑Import-Tools von der Ent­wick­lungs­um­ge­bung auf die Pro­duk­ti­ons­um­ge­bung schie­ben. 2

Im Übri­gen: Män­ner sind mit­ge­meint.

Schade …

Unglück­li­cher­wei­se funk­tio­niert die Lösung nicht bei manu­ell gesetz­ten inter­ne Links zu Site-eige­nen Sei­ten. Der Ver­lin­kungs­dia­log von Guten­berg stellt näm­lich Ein­trä­gen ohne Pro­to­koll­an­ga­be ein https:// vor­an. Ungüns­tig, wenn der Short­Code https://karsten-reincke.de- wie hier vor­ge­schla­gen — selbst als https://irgendwas.de/ent­fal­tet wird. Die ers­te Lösung dafür macht Arbeit: Wir wür­den https://karsten-reincke.de als rei­ne Domain defi­nie­ren und bei jedem Menü-Ein­trag und im Ver­lin­kungs­dia­log das Pro­to­koll manu­ell vor­an­stel­len. Die zwei­te Lösung hat ein Geschmäck­le: Alter­na­tiv könn­ten wir im Ver­lin­kungs­dia­log auf den Short­Code https://karsten-reincke.dever­zich­ten und das akzep­tie­ren, was Word­Press uns als Link anbie­tet. Dann müss­ten wir aber — nach der Migra­ti­on eines Arti­kels aus der Ent­wick­lung in die Pro­duk­ti­on — doch wie­der mit Bet­ter­Search­Re­place o.Ä. jede Ent­wick­lungs­url durch die Pro­duk­ti­ons­url erset­zen las­sen.

Was Ihr tun sollt? Kei­ne Ahnung. Ich jeden­falls neh­me die ent­täu­schen­de Lösung und spa­re mir damit Tipp­ar­beit.


Und in welchem Zusammenhang …

… steht das mit unse­rer Migra­ti­on zu bootS­core? Nun, hat eine Web-Desi­gne­rin die ers­ten Schrit­te auch in Sachen SEO getan, wird sie sich bald einem rich­tig dicken Brett zuwen­den, näm­lich ihrem Menü. Dabei muss sie the­ma­ti­sche Clus­ter sau­ber glie­dern und prä­sen­tie­ren, ohne zu fan­cy zu wer­den. Dann kann sie die Anzei­ge von fes­ten und ska­lier­ba­ren Bil­dern auf­hüb­schen und beschleu­ni­gen. Über einen Teil die­ser Etap­pe spricht auch die­ser Post.


Im Übri­gen: Män­ner sind mit­ge­meint.

  1. Ent­wi­ckelt wird die Instanz also unter der URL http://127.0.0.1/myDevDir — oder wie auch immer myDevDir real heißt.[]
  2. Und wer es noch schlich­ter möch­te, arbei­tet mit basic-url-short­codes[]
To top