Utiliser WP3.1
J'ai une page personnalisée avec un WP_Query et la requête obtient les variables dynamiques de l'URL. Et je veux des variables sûres et des URLs propres.
Exemple:
carpage /? carmodel = honda & location = finland
À
carpage/honda/finland /
J'ai créé add_rewrite_rule dans functions.php et cela fonctionne, mais je ne suis pas sûr que son utilisation soit sans danger.
Fonctions.php
function fcars() {
add_rewrite_rule('carpage/[/]?([a-zA-Z-]*)[/]?([a-zA-Z-]*)$', 'index.php?pagename=carpage&var1=$matches[1]&var2=$matches[2]');
add_rewrite_tag('%var1%', '[a-zA-Z]+');
add_rewrite_tag('%var2%', '[a-zA-Z]+');
}
add_action('init', 'fcars');
Et dans le modèle personnalisé je reçois les vars
Quelqu'un pourrait-il m'aider s'il vous plaît avec cela. Comment puis-je sécuriser cette utilisation et est-ce la bonne façon de fonctionner dans WP3.1
Quelle est la bonne façon de faire add_rewrite_rule dans ce cas:
carpage/honda/finland /
(uniquement des traits d'union et des petites lettres dans l'URL) carpage est la page de modèle statique.
Je pense que la add_rewrite_tag()
n'est pas nécessaire et peut être remplacée par l'ajout direct des variables aux vars de requête publics:
// Either directly (in your init hook):
$wp->add_query_var( 'var1' );
$wp->add_query_var( 'var2' );
// Or via a filter:
add_filter( 'query_vars', 'wpse12965_query_vars' );
function wpse12965_query_vars( $query_vars )
{
$query_vars[] = 'var1';
$query_vars[] = 'var2';
return $query_vars;
}
En outre, vous autorisez actuellement une ou deux barres obliques à l'avant, mais aucune à l'arrière. Je pense que vous voulez déplacer le /?
à la fin de la regex. La partie [a-zA-Z-]
du slug est aussi parfois écrite en tant que [^/]
(tout sauf une barre oblique), mais dans ce cas, cela ne fera probablement pas de différence.
Je voudrais écrire la règle de réécriture comme ceci:
add_action( 'init', 'wpse12065_init' );
function wpse12065_init()
{
add_rewrite_rule(
'carpage(/([^/]+))?(/([^/]+))?/?',
'index.php?pagename=carpage&var1=$matches[2]&var2=$matches[4]',
'top'
);
}
Le (/([^/]+))?
rend le groupe entier facultatif, donc /carpage
, /carpage/honda
et /carpage/honda/finland
devraient fonctionner, avec une barre oblique optionnelle à la fin. Comme nous avons besoin d'un groupe supplémentaire pour le /
, les variables se trouvent dans le groupe de capture suivant. Par conséquent, $matches[1]
devient $matches[2]
et $matches[2]
devient $matches[4]
.
Si vous souhaitez déboguer vos règles de réécriture, je vous recommande mon plugin d'analyseur Rewrite , il vous permet de jouer avec l'URL et de voir les variables de requête résultantes.