Este posibilă o adresă URL dinamică în WordPress?

18 iun. 2014, 16:26:18
Vizualizări: 14.3K
Voturi: 2

Știu că titlul pare puțin confuz, dar ceea ce caut este ceva posibil în Symfony sau Ruby on Rails. Am o pagină cu acest URL: http://mydomain.com/job/. Acum vreau această structură de URL: http://mydomain.com/job/php-developer/45, http://mydomain.com/job/java-developer/46. Parametrii după /job/ sunt dinamici și nu reprezintă nicio pagină sau articol, ci se află sub o pagină job.

Este posibil acest lucru în WordPress?

ÎNTREBARE ACTUALIZATĂ:

Conform răspunsului lui @Gioia, am actualizat codul meu.

Mai jos este codul meu:

add_filter('query_vars', 'add_query_vars');
function add_query_vars($aVars) {
    $aVars[] = "job_title"; // Adaugă variabila job_title la query vars
    $aVars[] = "job_id"; // Adaugă variabila job_id la query vars
    return $aVars;
}

add_action( 'init', 'add_rules' );  
function add_rules() {
    // Adaugă o regulă de rescriere pentru URL-uri de tipul /job/titlu-job/id-job
    add_rewrite_rule('^/job/([^/]*)/([^/]*)/?','index.php?page_id=13338&job_title=$matches[1]&job_id=$matches[2]','top');
}

Acum primesc o eroare 404 când încerc acest URL http://mydomain.com/job/php-dev/45. Dar când încerc acest URL http://mydomain.com/index.php?page_id=13338&job_title=php-dev&job_id=45 funcționează.

7
Comentarii

Poți obține structura /job/job-title/ folosind un custom post type și posibil /45 prin definirea unei structuri personalizate pentru post type-ul tău.

Howdy_McGee Howdy_McGee
18 iun. 2014 16:42:01

URL-urile mele sunt dinamice, de genul /job/php-developer/45, /job/java-developer/46 etc.

Niraj Chauhan Niraj Chauhan
18 iun. 2014 17:21:00

Care este scopul numerelor 45 / 46? Sunt contoare? Ce reprezintă acestea pentru a le face dinamice?

Howdy_McGee Howdy_McGee
18 iun. 2014 17:41:15

Scopul meu este să obțin acest URL http://domeniulmeu.com/job/?title=php-developer&job_id=45, dar pentru a face acest URL prietenos pentru SEO, vreau ceva de genul http://domeniulmeu.com/job/php-developer/45

Niraj Chauhan Niraj Chauhan
18 iun. 2014 17:52:44

Unde ID-ul jobului este o valoare meta de un anumit tip? Aceasta nu este o sarcină simplă.

Howdy_McGee Howdy_McGee
18 iun. 2014 18:05:55

@Howdy_McGee acest ID este stocat într-un tabel

Niraj Chauhan Niraj Chauhan
18 iun. 2014 18:35:59

Hei, nu uita să actualizezi întrebarea ta pentru a elimina / defectuos :)

Gioia Fueter Gioia Fueter
19 iun. 2014 11:16:11
Arată celelalte 2 comentarii
Toate răspunsurile la întrebare 1
8

Nu sunt complet sigur că înțeleg ce înțelegi prin faptul că parametrii sunt sub o pagină de job, dar dacă te referi la faptul că diferite conținuturi sunt încărcate pe aceeași pagină folosind javascript/ajax, ai putea utiliza https://github.com/browserstate/history.js/ pentru a genera URL-ul corespunzător pentru fiecare stare. Este dificil să spun mai multe despre cum ai putea implementa acest lucru fără să știu mai multe despre ce încerci să realizezi.


ACTUALIZARE

Cred că ar trebui să folosești reguli personalizate de rescriere. Acesta este mecanismul pe care WordPress îl folosește pentru a crea URL-uri prietenoase și are o API pentru a adăuga propriile reguli.

Mai întâi, trebuie să adaugi etichetele pe care trebuie să le urmărești, în cazul tău titlul și job_id. De fapt, probabil ar trebui să schimbi titlul în ceva de genul job_title, nu sunt complet sigur că titlul ar putea crea o problemă, dar deoarece este ceva în WordPress, este mai bine să fii precaut.

Am folosit următorul cod, trebuie să-l adaugi în functions.php, în tema ta.

add_filter('query_vars', 'add_query_vars');
function add_query_vars($aVars) {
    $aVars[] = "job_title"; 
    $aVars[] = "job_id"; 
    return $aVars;
}  

Mai multe informații: http://codex.wordpress.org/Rewrite_API/add_rewrite_tag

Apoi adaugi regula de rescriere, tot în functions.php:

add_action( 'init', 'add_rules' );  
function add_rules() {
    add_rewrite_rule('^job/([^/]*)/([^/]*)/?','index.php?page_id=12&job_title=$matches[1]&job_id=$matches[2]','top');
}

Ar trebui să înlocuiești page_id cu ID-ul paginii de job Mai multe informații: http://codex.wordpress.org/Rewrite_API/add_rewrite_rule.

După ce ai salvat fișierul, trebuie să mergi la setări -> legături permanente și pur și simplu să salvezi fără a schimba nimic. Asta va asigura că setările tale sunt încărcate corect.

Poți instala pluginul Rewrite Inspector pentru a vedea toate regulile de rescriere aplicate și a verifica dacă ale tale sunt prezente. https://wordpress.org/plugins/rewrite-rules-inspector/

Poți instala pluginul Debug Bar pentru a inspecta pagina și a vedea ce regulă de rescrire este aplicată paginii: https://wordpress.org/plugins/debug-bar/

Și aici ai mai multe informații despre regulile de rescriere în general: http://www.addedbytes.com/articles/for-beginners/url-rewriting-for-beginners/


ACTUALIZARE 2

Pentru a prelua parametrii:

if (isset($wp_query->query_vars['job_title'])) {
    $job_title = urldecode($wp_query->query_vars['job_title']);?>
<?php }
18 iun. 2014 17:36:46
Comentarii

Scopul meu este să obțin acest URL http://mydomain.com/job/?title=php-developer&job_id=45, dar pentru a face acest URL mai prietenos pentru SEO, vreau ceva de genul http://mydomain.com/job/php-developer/45

Niraj Chauhan Niraj Chauhan
18 iun. 2014 17:47:03

Poți folosi reguli personalizate de rescriere:

Gioia Fueter Gioia Fueter
18 iun. 2014 20:38:14

Salut, mulțumesc pentru răspuns. Am încercat codul tău, dar afișează pagina 404, te rog verifică modificarea mea din întrebarea de mai sus.

Niraj Chauhan Niraj Chauhan
19 iun. 2014 10:07:20

Bună, tocmai am încercat codul și a funcționat pentru mine. Mai întâi, verifică dacă ai schimbat ID-ul paginii care a venit în cod (?page_id=12) cu ID-ul paginii de joburi (poți vedea care este ID-ul paginii când ești în modul de editare, face parte din URL: post.php?post=6&action=edit, 6 este ID-ul paginii). De asemenea, asigură-te că după fiecare modificare mergi la pagina de setări pentru permalinkuri și salvezi.

Gioia Fueter Gioia Fueter
19 iun. 2014 10:36:40

Am schimbat ID-ul paginii conform al meu, dacă accesez acest URL index.php?page_id=13338&job_title=$matches[1]&job_id=$matches[2] funcționează, dar cu URL-ul personalizat nu merge. Trebuie să adaug add_rewrite_tag? sau să fac modificări în htaccess?

Niraj Chauhan Niraj Chauhan
19 iun. 2014 10:39:51

Doar pentru a fi sigur, ai mers la setările pentru permalinkuri și ai salvat?

Gioia Fueter Gioia Fueter
19 iun. 2014 10:41:43

Da, am făcut o salvare în permalink-uri, structura permalink-urilor mele este în felul următor /%postname%/

Niraj Chauhan Niraj Chauhan
19 iun. 2014 10:44:49

Hai să continuăm această discuție în chat.

Gioia Fueter Gioia Fueter
19 iun. 2014 10:49:58
Arată celelalte 3 comentarii