Comment obtenir de jolies URL avec add_query_arg dans les permaliens

8

Avec, add_query_arg()il est agréable d'ajouter des paramètres supplémentaires à une URL et il est également facile de créer une règle de réécriture. Jusqu'ici tout va bien. Mais le problème est le remplacement d'URL effectué par wordpress.

Quand j'ai une URL, comme:

www.mysite.com/?page_id=1&myvar=test

et je tape cette URL dans la ligne d'adresse du navigateur avec les permaliens activés. Ce lien deviendra:

www.example.com/pagename/?myvar=test

MAIS : ce que j'aimerais obtenir c'est:

www.example.com/pagename/test

Enfin, je voudrais utiliser du code comme:

<a href="<?php add_query_arg( 'myvar', 'test', get_permalink() ) ?>"> .... </a>

ce qui entraînerait:

www.example.com/pagename/test

Comment cela peut il etre accompli? J'ai passé des heures à lire des documents et je n'ai pas trouvé de solution.

user3114592
la source
1
J'aimerais savoir comment cela se fait. +1 à la question.
henrywright

Réponses:

5

Je viens de faire face à la même situation et suis tombé sur cette question en cherchant sur Google.

Il semble que ce ne soit pas possible. Le noyau lui-même ajoute simplement des chaînes à l'URL si de jolis permaliens sont activés, voir https://core.trac.wordpress.org/browser/tags/3.9.1/src/wp-includes/link-template.php#L571

Pour toute personne intéressée par ceci: vous pouvez faire quelque chose comme ça dans votre code:

if ( '' != get_option('permalink_structure') ) {
    // using pretty permalinks, append to url
    $read = user_trailingslashit( get_permalink() . 'test' ); // www.example.com/pagename/test
  } else {
    $read = add_query_arg( 'test', '', get_permalink() ); // www.example.com/pagename/?test
  }

Cette solution est également recommandée par Jon Cave dans un commentaire sur le blog officiel de make: https://make.wordpress.org/plugins/2012/06/07/rewrite-endpoints-api/#comment-686

swissspidy
la source
0

WordPress ne vous laissera pas faire cela facilement. En fait, les règles de réécriture sont votre seule option pour réaliser ce type de chose dans WordPress et les règles de réécriture WordPress peuvent devenir très compliquées lorsque votre site se développe car les plugins et les thèmes (et vous aussi) peuvent ajouter des règles de réécriture personnalisées au-dessus des règles existantes dans votre (multi ) installation sur site.

La solution @swissspidy fonctionnera si vous avez déjà une règle de réécriture pour votre clé (myvar) et que vous utilisez des permaliens dans la première condition, puis que vous revenez aux chaînes de requête traditionnelles en l'absence de ces conditions. La solution @Johnathan Joosten montre comment les règles de réécriture peuvent devenir très très complexes dans WordPress (imaginez faire cela pour toutes vos clés et valeurs de chaîne de requête ...)

J'ai rencontré ce problème plusieurs fois auparavant en travaillant sur des projets de taille moyenne pour mes clients et j'ai pu réaliser quelque chose de similaire en utilisant un plugin appelé Obfusquer. Selon le site Web, il masque toutes les chaînes de requête WordPress avec des clés secrètes définies par l'utilisateur et fournit également des crochets pour les exigences personnalisées avancées.

Drôle, il n'est pas répertorié sur le référentiel de plugins WordPress, et je pense que vous aurez besoin d'un abonnement (ce qui je pense est vraiment abordable car 1 licence unique fonctionnera même dans une installation multisite) mais voici un lien vers celui-ci si vous avez besoin de masquer / cacher les chaînes de requête dans les installations WordPress. Ils ont également de la documentation ici .

J'utilise maintenant le plugin dans presque tous mes projets wordpress, j'espère qu'il répond à vos besoins. À votre santé.

Ramos Abdellaziz
la source
-1

La solution Wordpress serait d'ajouter des règles de réécriture pour créer quelque chose comme ceci:

    add_action( 'init', 'my_rewrite_add_rewrites' );
    function my_rewrite_add_rewrites()
    {
        add_rewrite_rule( 'calendar/([0-9]{4})/?$', 'index.php?post_type=events&year=$matches[1]', 'top' );
        add_rewrite_rule( 'calendar/([0-9]{4})/page/?([0-9]{1,})/?$', 'index.php?post_type=events&year=$matches[1]&paged=$matches[2]', 'top' );
    }

en savoir plus: https://codex.wordpress.org/Rewrite_API/add_rewrite_rule

Jonathan Joosten
la source
1
Vous auriez dû rendre plus compliqué le vote négatif ...
Vishal Kumar Sahu