Reguli personalizate de rescriere URL în WordPress pentru pagini cu variabile

24 mar. 2011, 19:11:55
Vizualizări: 17.2K
Voturi: 8

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.

0
Toate răspunsurile la întrebare 1
0
16

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.

24 mar. 2011 20:05:00