web-dev-qa-db-fra.com

add_rewrite_rule en ignorant d'autres paramètres que le paramètre "p"

Un article spécifique sur mon site Web a un shortcode qui utilise un paramètre appelé "requête" pour produire son contenu. Donc, voici un exemple d’URL de travail:

https://example.com/my-post?query=980

"my-post" est le lien permanent de la publication et la page utilise correctement le paramètre "query".

Cependant, nous devons changer cette URL en une adresse conviviale telle que https://example.com/something-here/980 , puis j'essayais de: utilisez le add_rewrite_rule comme ceci:

function custom_add_rewrite_rules() {
    add_rewrite_rule(
        '^something-here/([\d]+)$',
        'index.php?p=10219&query=$matches[1]',
        'top'
    );
}
add_action('init', 'custom_add_rewrite_rules');

Lorsque j'essaie d'accéder à l'URL conviviale, je suis redirigé vers https://example.com/my-post avec succès, mais le query param est null ($_GET["query"] = null).

J'ai aussi essayé d'utiliser add_rewrite_tag pour enregistrer "query", mais sans succès.

Si quelqu'un a de la lumière à faire, ce serait plus qu'apprécié.

1
Adriano Castro

On dirait que le plugin s'attend à ce qu'il y ait un paramètre get.

Votre règle de réécriture supprime le get-param avant qu'il puisse être utilisé par le plugin.

Si le plugin n'a pas été mis à jour depuis longtemps (c'est un abandonware), vous pouvez le parcourir et remplacer le get-param par la partie de l'URL qui aurait été le get-param. Veillez simplement à empêcher la mise à jour du plug-in une fois vos modifications apportées.

Si vous ajoutez ce qui suit

function custom_add_rewrite_rules() {
  add_rewrite_tag('%query%','([^&]+)');

  add_rewrite_rule(
      '^something-here/([\d]+)$',
      'index.php?p=10219&query=$matches[1]',
      'top'
  );
}
add_action('init', 'custom_add_rewrite_rules');

& puis remplacez $_GET['query'] &/ou $_REQUEST['query] par get_query_var( 'query' ) dans le plug-in que vous avez décrit, cela devrait suffire à faire l'affaire.

Stephen Harris résume bien la réponse ici

1
admcfajn