web-dev-qa-db-fra.com

Comment créer des itinéraires d'URL personnalisés?

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

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?

46
Javier Villanueva

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.

54
Milo

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);

Codex API de réécriture/ajouter une règle de réécriture

API Codex Rewrite/ajouter une balise rewrite

9