WordPress: Cum repari link-urile stricate după ce-ai schimbat permalink-urile

Long story short, acu’ vreo doi-trei ani, am schimbat structura permalink-urilor pe blog. Și deși aveam Broken Link Checker instalat, n-am dat prea multă importanță. Pur și simplu, nu m-am gândit că tocmai am stricat niște ani de internal linking.

Cre’ că am dat, pur și simplu, unlink la vreo 300 de link-uri interne, la un moment dat. Nu m-am uitat la ce dau, am dat de-a dreptul. Zilele astea, mi-am adus aminte de ele și când m-am uitat în listă… iată-le, ale mele.

Partea bună e că Broken Link Checker are opțiunea de Bulk Edit. Și mai are și-o bifă pentru folosit regular expressions. Problema e că… eu sunt varză la Regex/RegExp (treaba asta are atâtea prescurtări, că naiba știe care-i aia corectă).

Cu un strop de ajutor de la Dan (i-aș da link, da’ n-are site), le-am reparat. Pe scurt, permalink-urile mele vechi erau de forma http://subiectiv.ro/numecategorie/titlu/, iar unele link-uri erau de forma http://subiectiv.ro/numecategorie/titlu – adică fără slash-ul de la final. Noua structură e mai simplă, https://www.subiectiv.ro/titlu.html.

Trebuia, deci, să înlocuiesc o bucată, să șterg o alta, să șterg “/”-ul din coadă și să adaug “.html”. Doar că în mintea mea s-a creat o ciorbă care amesteca niște variabile de tipul celor din JavaScript cu niște comenzi de SQL în phpMyAdmin și am ignorat complet opțiunea de editare din plugin.

Ca să n-o mai lungesc, formula de Regex în PHP pentru prima variantă (cea care se termină în “titlu/“) e http:\/\/(.+?)\/(.+?\/)(.+?)\/, pentru cea fără slash-ul de final e http:\/\/(.+?)\/(.+?\/)(.+$). Pentru rezultatul final (adică replace-ul), e https://www.$1/$3.html.

Pentru cine e la fel de varză ca mine când vine vorba de Regex în PHP, folosiți cu încrederea unealta asta pentru testare. Altfel, în caz c-ați avut bloguri/site-uri pe care le-ați folosit în comentarii, iar acum sunt picate sau goale, că poate v-ați gândit să le refaceți la un moment dat, link-urile au dispărut – le-am șters dac-a dat cu not found.

3 comentarii

  1. http:\/\/(.+?)\/(.+?\/)(.+?)\/?$ ar trebui sa le prinda pe ambele – si fara slash si cu.

    Guess now I’ll see if the code tag works in comments :P

  2. Cred ca e prima data cand comentez pe aici.
    Si o fac pentru Ana Tudor. Nu mai stiu ce nenorocire de CSS imi manca noaptea si am dat peste un pen de-al ei, dupa care m-am uitat si la altele si am ramas impresionat :) gg!.

    Daca ea zice ca merge regex-ul ala cred ca esti safe ;)