Adăugați Regulă de Rescriere pentru Pagină Personalizată
Î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:
- Conflict de Nume de Autor (nume similare).
- 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:
- ID utilizator
- nume autor
- număr pagină (dacă există) fiind nou în WP și rescriere, nu sunt sigur cum pot realiza acest lucru mulțumesc anticipat

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.

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

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)

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.

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.
