Cum creezi URL-uri dinamice în WordPress

continut dinamic si url dinamic pe wordpress

M-am lovit de problema asta recent. Adică trebuia ca ceva site făcut în WordPress să genereze dinamic niște date, cât și url-uri dinamice. Aproape ceva în genul unui director WEB.

De exemplu, vrei sa pui punctele de lucru ale unei afaceri și vrei să fie ceva în genul: numesite.ro/puncte/localitate. În cazul acesta, dacă nu cumva pui paginile manual, cu parent page etc., WordPressul nu este chiar cel mai bun prieten al tău. Se poate face un router, ca apoi să-ți creezi o rețea de linkuri, sau poți face un jquery care să creeze parametri în url, apoi cu beautify să faci că „apare ce trebuie”. Numai că la faza cu jquery, intervine problema de SEO, pentru că tot contentul se va desfășura în aceeași pagină, iar dacă vreun crawler va încerca să indexe acea pagină, va primi o eroare 404, deoarece respectiva destinație nu există. Sau cel puțin așa a fost în cazul propriei soluții. Poate altcineva e mai deștept și face un mega script 🙂

Bun, deci cum generăm contentul și url-urile în mod dinamic?

Păi… Soluția propusă de mine este a se face o pagină nouă din backendul de WP cu numele „Puncte”. Practic, este parent pageul. Acesta va trebui să aibă un template care să genereze contentul dorit de tine, iar acest template este un fișier php, care va trebui urcat în directorul cu tema WP activă și trebuie să respecte anumite criterii, pentru ca platforma să-l recunoască precum template pentru pagini.

Prima dată trebuie să adaugăm un query în functions.php:


add_filter('query_vars', 'add_localitate_var', 0, 1);
function add_localitate_var($vars){
    $vars[] = 'localitate';
    return $vars;
}

Apoi trebuie pus un rewrite rule:

add_rewrite_rule('^puncte/([^/]*)/?','index.php?post_type=page&name=puncte&localitate=$matches[1]','top');

Urmează atingerea finală și propria inspirație

Practic, acum până acum luăm localitățile din baza de date și am făcut un url frumos. Pasul următor este să introducem în template aceste valori:

$localitate = get_query_var('localitate');

Cam atât! Voi mai căuta și alte soluții și le voi prezenta publicului 🙂

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *