web-dev-qa-db-fra.com

add_rewrite_rule () ne fonctionne pas

Je dois transmettre une référence de propriété à la dernière partie d'une URL pour rechercher une entrée dans la base de données, par exemple:

http://example.com/cottage-details/G638/

Je dois passer le G638 dans un tableau pour mon plugin. Ce que j'ai ci-dessous appelle la page des détails du chalet, mais en supprimant la dernière partie de l'URL et en affichant une page vide, plutôt que les informations que je souhaite extraire du serveur. Si j'utilise

http://example.com/cottage-details/?propref=G638

cela fonctionne parfaitement.

/**
 * Rewrite tags for plugin
 */
function dcc_rewrite_tags() {
    add_rewrite_tag('%propref%', '([^&]+)');
}

add_action('init', 'dcc_rewrite_tags', 10, 0);

/**
 * Rewrite rules for plugin 
 */
function dcc_rewrite_rules() {
    add_rewrite_rule('^[^/]*/([^/]*)/?','index.php?p=2&propref=$matches[1]','top');
}

add_action('init', 'dcc_rewrite_rules', 10, 0);

Que se passe-t-il?

2
Badger

Votre règle de réécriture est assez large et générera très probablement beaucoup de conflits.

add_action('init', 'dcc_rewrite_tags');
function dcc_rewrite_tags() {
    add_rewrite_tag('%propref%', '([^&]+)');
}

add_action('init', 'dcc_rewrite_rules');
function dcc_rewrite_rules() {
    add_rewrite_rule('^cottage-details/(.+)/?$','index.php?page_id=2&propref=$matches[1]','top');
}

Ensuite, vous pouvez accéder à la variable propref comme:

$propref = get_query_var( 'propref' );

Et n'oubliez pas de vider les règles de réécriture; vous pouvez le faire en allant dans Paramètres -> Permaliens et en cliquant sur le bouton Enregistrer.

Remarque : a modifié p query var en page_id car, comme vous l'avez dit dans les commentaires, vous utilisez une page, pas une publication standard.

6
cybmeta