Adăugați Regulă de Rescriere pentru Pagină Personalizată

19 ian. 2012, 18:41:32
Vizualizări: 15.4K
Voturi: 4

Încercam să creez o pagină specifică autorului cu un URL specific autorului și funcționa bine, dar când am creat acest URL nu am luat în considerare următoarele 2 aspecte:

  1. Conflict de Nume de Autor (nume similare).
  2. Opțiunea de paginare care trebuie adăugată pe pagina autorului (pentru postările publicate)

Iată regula mea inițială:

function add_my_rule() {    
    global $wp; 
    $wp->add_query_var('args');   
    add_rewrite_rule('writer\/(.*)','index.php?pagename=writer&args=$matches[1]','top'); 
    /*global $wp_rewrite;
    $wp_rewrite->flush_rules();*/
}
add_action('init', 'add_my_rule'); 

Aceasta funcționa pentru un URL precum:

www.myblog.com/writer/umesh-awasthi ,

dar pot exista mai mulți autori cu același nume și acest lucru va crea o problemă. Așadar, plănuiam să am URL-uri pentru autori precum are Stack Overflow:

www.myblog.com/writer/001/umesh-awasthi unde 001 este ID-ul utilizatorului care va fi întotdeauna unic.

A doua problemă este cu paginarea, deoarece pot crea paginare pe pagina autorului, dar când utilizatorul apasă pe a doua pagină, URL-ul devine:

http://localhost/blog/wordpress/writer/umesh-awasthi/page/2/ așa că conform regulii mele de Rescriere URL voi primi următoarele date ca parametru umesh-awasthi/page/2 ceea ce înseamnă că acum interogarea mea nu va funcționa deoarece se va aștepta la numele autorului ca umesh-awasthi și va primi umesh-awasthi/page/2.

Întrebarea mea este: pot rescrie regula astfel încât să obțin datele în următoarele trei variabile separate:

  1. ID utilizator
  2. nume autor
  3. număr pagină (dacă există) fiind nou în WP și rescriere, nu sunt sigur cum pot realiza acest lucru mulțumesc anticipat
0
Toate răspunsurile la întrebare 1
6
function add_my_rule() {    
    global $wp; 
    $wp->add_query_var('args');   
    $wp->add_query_var('arg_username');
    add_rewrite_rule('writer/([0-9]+)/([^/]*)/page/([0-9]+)','index.php?pagename=writer&args=$matches[1]&arg_username=$matches[2]&paged=$matches[3]','top');
    add_rewrite_rule('writer/([0-9]+)/([^/]*)','index.php?pagename=writer&args=$matches[1]&arg_username=$matches[2]','top');
    /*global $wp_rewrite;
    $wp_rewrite->flush_rules();*/
}
add_action('init', 'add_my_rule');

Această funcție ar trebui să rezolve problema. Prima regulă de rescriere este pentru writer/id_utilizator/username (numele de utilizator nu este folosit în regula de rescriere dar este necesar pentru ca aceasta să funcționeze). A doua regulă de rescriere este aceeași, doar că adaugă suport pentru paginare.


EDIT: am adăugat arg_username în codul de mai sus.

19 ian. 2012 20:43:00
Comentarii

acest lucru nu funcționează conform așteptărilor, folosind regula de mai sus îmi oferă doar user-id și nu numele scriitorului, ceea ce înseamnă că pentru www.myblog.com/writer/001/umesh-awasthi regula de mai sus îmi oferă doar 001 și nu numele scriitorului

Umesh Awasthi Umesh Awasthi
20 ian. 2012 18:44:00

Funcționează așa cum am spus în răspunsul meu. Dacă aveți ID-ul utilizatorului, nu aveți nevoie de numele de utilizator. Dacă doriți ambele, puteți adăuga un alt queryvar (cum ar fi arg_username) și să-l adăugați la regula de rescriere: add_rewrite_rule('writer/([0-9]+)/([^/]*)','index.php?pagename=writer&args=$matches[1]&arg_username=$matches[2]','top'); (de asemenea, modificați-o și în cealaltă regulă de rescriere)

Rob Vermeer Rob Vermeer
20 ian. 2012 18:48:20

poate fac ceva greșit din cauza lipsei de cunoștințe, dar add_rewrite_rule('writer/([0-9]+)/([^/]*)','index.php?pagename=writer&args=$matches[1]','top'); add_rewrite_rule('writer/([0-9]+)/([^/]*)','index.php?pagename=writer&args=$matches[1]&arg_username=$matches[2]','top'); add_rewrite_rule('writer/([0-9]+)/([^/]*)/page/([0-9]+)','index.php?pagename=writer&args=$matches[1]&arg_username=$matches[2]&paged=$matches[3]','top'); regula încă nu îmi oferă numele autorului.

Umesh Awasthi Umesh Awasthi
20 ian. 2012 18:57:01

Am editat răspunsul meu.

Rob Vermeer Rob Vermeer
20 ian. 2012 19:00:26

Din păcate, valoarea lui $paged vine mereu 0, am încercat să o schimb în $page_num și am adăugat asta în funcția mea $wp->add_query_var('paged_num'); dar nimic nu a funcționat.

Umesh Awasthi Umesh Awasthi
20 ian. 2012 19:24:04

Greșeala mea, verifică răspunsul actualizat (rewriterule pentru paged trebuia să fie în partea de sus).

Rob Vermeer Rob Vermeer
20 ian. 2012 19:31:28
Arată celelalte 1 comentarii