Reguli personalizate de rescriere URL în WordPress pentru pagini cu variabile
Folosesc WP3.1
Am o pagină personalizată cu un WP_Query și query-ul primește variabile dinamice din URL. Vreau să am variabile sigure și URL-uri curate.
Exemplu:
carpage/?carmodel=honda&location=finland
ÎN
carpage/honda/finland/
Am creat add_rewrite_rule în functions.php și funcționează, dar nu sunt sigur că este sigur să folosesc acest lucru.
Functions.php
function fcars() {
// Adaugă regula de rescriere pentru URL-uri de tipul carpage/model/locatie
add_rewrite_rule('carpage/[/]?([a-zA-Z-]*)[/]?([a-zA-Z-]*)$', 'index.php?pagename=carpage&var1=$matches[1]&var2=$matches[2]');
// Adaugă tag-uri de rescriere pentru variabile
add_rewrite_tag('%var1%', '[a-zA-Z]+');
add_rewrite_tag('%var2%', '[a-zA-Z]+');
}
add_action('init', 'fcars');
Și în template-ul personalizat obțin variabilele
Poate cineva să mă ajute cu acest lucru. Cum pot face acest lucru sigur de utilizat și este aceasta calea corectă în WP3.1
Care este metoda corectă de a face add_rewrite_rule în acest caz:
carpage/honda/finland/
(doar liniuțe și litere mici în URL) carpage este pagina statică template.

Cred că add_rewrite_tag()
nu este necesar și poate fi înlocuit cu adăugarea directă a variabilelor în variabilele publice de interogare:
// Fie direct (în hook-ul tău init):
$wp->add_query_var( 'var1' );
$wp->add_query_var( 'var2' );
// Sau prin intermediul unui filtru:
add_filter( 'query_vars', 'wpse12965_query_vars' );
function wpse12965_query_vars( $query_vars )
{
$query_vars[] = 'var1';
$query_vars[] = 'var2';
return $query_vars;
}
De asemenea, în prezent permiteți una sau două slash-uri în față dar niciuna în spate. Cred că trebuie să mutați /?
la sfârșitul regex-ului. Partea [a-zA-Z-]
pentru slug este uneori scrisă și ca [^/]
(orice altceva în afară de slash), dar în acest caz probabil nu va face diferența.
Aș scrie regula de rescriere astfel:
add_action( 'init', 'wpse12065_init' );
function wpse12065_init()
{
add_rewrite_rule(
'carpage(/([^/]+))?(/([^/]+))?/?',
'index.php?pagename=carpage&var1=$matches[2]&var2=$matches[4]',
'top'
);
}
(/([^/]+))?
face întregul grup opțional, deci /carpage
, /carpage/honda
și /carpage/honda/finland
ar trebui să funcționeze, cu un slash opțional la sfârșit. Deoarece avem nevoie de un grup suplimentar pentru /
, variabilele sunt în următorul grup de captură, deci ceea ce era $matches[1]
devine $matches[2]
și $matches[2]
devine $matches[4]
.
Dacă doriți să depanați regulile de rescriere, recomand plugin-ul meu Rewrite analyzer, care vă permite să testați URL-ul și să vedeți variabilele de interogare rezultate.
