web-dev-qa-db-fra.com

rewrite_rule () ne préserve pas la chaîne de requête

Nous avons ajouté une règle rewrite_rule personnalisée sur notre site afin de permettre à un joli lien entrant d'être analysé et traité correctement. Les liens sont construits comme domain.com/meetings/faculty/someIDnumber

add_action( "init", "pleasing_permalinks" );
function pleasing_permalinks() {
    add_rewrite_tag( '%hash%', '([^&]+)' );
    add_rewrite_rule(
        'meetings/faculty/([^/]+)/?$',
        'index.php?p=1598&hash=$matches[1]',
        'top'
    );
    //flush_rewrite_rules();
}

Rewrite Analyzer approuve ce qui précède, mais lorsque nous testons avec des liens réels dans le navigateur, le numéro d'identification incorporé n'est pas conservé. Que manque-t-il ici?

3
JCL1178

Si faculty est une page enfant de meetings, la règle doit être:

add_rewrite_rule(
    'meetings/faculty/([^/]+)/?$',
    'index.php?pagename=meetings/faculty&hash=$matches[1]',
    'top'
);

pagename=meetings/faculty au lieu de p=1598

EDIT- ou alternativement:

add_rewrite_rule(
    'meetings/faculty/([^/]+)/?$',
    'index.php?page_id=1598&hash=$matches[1]',
    'top'
);

page_id=1598 au lieu de p=1598

7
Milo

Vient de tester votre code sur une installation propre WP et a pu obtenir la variable avec:

echo $wp_query->query_vars['hash'];

Wordpress Codex - add_rewrite_tag :
Notez que l'utilisation de $ _GET sur une URL réécrite ne fonctionnera pas, même si la réécriture inclut les variables de chaîne de requête. Vous devez utiliser $ wp_query.

Éditer: Comme indiqué dans la réponse correcte, "p" doit être remplacé par "page_id" pour pouvoir conserver les variables lors de la redirection vers un message de type "page".

0
Kim

Avez-vous essayé d'utiliser le premier index plutôt que le second?

'index.php?p=1598&hash=$matches[0]',

Les tableaux dans PHP commencent à 0 pas 1

0
Tom J Nowell