J'ai une exigence très particulière, j'espère pouvoir l'expliquer sans trop de confusion. J'ai créé un modèle de page dans lequel je liste certaines propriétés issues d'un fichier XML externe. Jusqu'à présent, aucun problème, disons que l'URL ressemble à ceci:
http://www.example.com/properties/
Chaque propriété a un lien qui devrait rediriger l'utilisateur vers une page "Propriété unique" qui affiche plus d'informations à ce sujet. Je me demandais s'il y avait un moyen de faire le lien comme ceci:
http://www.example.com/properties/123
Où 123
serait l'id de la propriété. Donc, si j'ai l'URL comme properties/some_id
, je veux pouvoir charger un fichier d'affichage (comme les fichiers single.php
ou page.php
), mais propre à cette condition d'URL.
Est-ce possible?
Ajoutez ceci au functions.php de votre thème, ou mettez-le dans un plugin .
add_action( 'init', 'wpse26388_rewrites_init' );
function wpse26388_rewrites_init(){
add_rewrite_rule(
'properties/([0-9]+)/?$',
'index.php?pagename=properties&property_id=$matches[1]',
'top' );
}
add_filter( 'query_vars', 'wpse26388_query_vars' );
function wpse26388_query_vars( $query_vars ){
$query_vars[] = 'property_id';
return $query_vars;
}
Cela ajoute une règle de réécriture qui dirige les demandes vers /properties/
avec toute combinaison de chiffres après pagename properties
, avec le jeu de requêtes var property_id
. Assurez-vous simplement de visiter la page des paramètres de votre permalien et de l’enregistrer pour vider les règles de réécriture afin que cette nouvelle règle soit incluse.
Dans votre modèle page-properties.php
, get_query_var('property_id')
renverra l'id de la propriété s'il a été défini, sinon il affichera la page de propriétés par défaut.
Une autre façon de le faire:
add_action('init', function() {
add_rewrite_rule( '^properties/([0-9]+)/?',
'index.php?pagename=properties&property_id=$matches[1]',
'top' );
}, 10, 0);
add_action('init', function() {
add_rewrite_tag( '%property_id%', '([^&]+)' );
}, 10, 0);