Reminder: folosește id, nu slug

Reminder: folosește id, nu slug

Dacă lucrezi cu WordPress, mai devreme sau mai târziu vei afla că majoritatea lucrurilor din DB au cel puțin două atribute comune: slug și id. Sigur, ele variază în funcție de obiect (WP_Post folosește ID, dar WP_Term folosește term_id), dar prezența lor, într-o formă sau alta, este sigură.

Prin urmare, atunci când ai de făcut diverse interogări – de exemplu term_exists știe să verifice un term în funcție de tipul primului parametru: dacă e string, caută după slug, dacă e integer, caută după id – folosește întotdeauna id-uri, dintr-un motiv foarte simplu: slug este un atribut ce se poate schimba mult mai ușor decât se poate schimba id.

De fapt, id se poate schimba într-un singur fel: obiectul respectiv este șters. slug, pe de altă parte, poate fi schimbat de oricine cu suficiente permisiuni.

Poate că de cele mai multe ori nu e o problemă foarte mare să faci o referință în funcție de slug, dar gândește-te la situația în care salvezi în DB slug (e.g. în setări) iar un utilizator îți modifică slug peste jumătate de an.

3 Comentarii

Alex a scris

Ar mai fi un motiv, nu doar practic ci si tehnic de data asta: din ce am citit, citirea id (care este integer) din db este mai rapida decat a unui slug (care este varchar).

Exista si un argument contra, acela ca la schimbarea hostului sau migrarea catre alt install de wp e posibil ca id-ul sa se schimbe.

Ionuț Staicu a scris

@Alex: id-ul se schimbă doar dacă migrezi cu XML-ul (import/export). Dacă doar transferi DB ești ok :)

Cât despre performanță… Greu de zis. Pare mai mult genul de micro-optimizare, ceva ce nu e vizibil decât dacă ai o combinație de trafic ridicat ȘI multe obiecte.

Alex a scris

@Ionuț Staicu: sunt multi cei care transfera cu ajutorul unor pluginuri sau prin xml, nu toti lucreaza „on a daily bases” cu wp, de aici => ce ziceam. Eu fac manual totul, de la db la fisiere :) ia mai mult timp/munca, dar e mai sigur.

Am simtit problema id vs slug, nu e vorba despre trafic si nu la crearea unui plugin sau a unei teme, ci la citirea efectiva a slugului. In loc de gigel-merge-la-film pune 12345-gigel-merge-la-film la crearea slugului, interogarea in db dureaza mai putin, pagina se incarca mult mai repede :) am testat treaba asta pe propria-mi piele.

Adaugă un comentariurăspuns pentru

Link-urile în context sunt binevenite. Comentariile fără nume/email valid sunt șterse.
PS: Comentariul NU este editabil.

Acest sit folosește Akismet pentru a reduce spamul. Află cum sunt procesate datele comentariilor tale.

Site-ul blog.iamntz.com utilizează cookie-uri. Continuarea navigării presupune acceptarea lor. Mai multe informații.

windows apple dropbox facebook twitter