web-dev-qa-db-fra.com

Comment obtenir de jolies URL avec add_query_arg dans les permaliens

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 avoir, c'est:

www.example.com/pagename/test

Enfin, je voudrais utiliser un code comme:

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

qui aurait pour résultat:

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.

8
user3114592

Juste face à la même situation et est tombé sur cette question tout en googlant.

Il semble que ce n'est pas possible. Le noyau lui-même n’ajoute que 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 ceci 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 la marque: https://make.wordpress.org/plugins/2012/06/07/rewrite-endpoints-api/#comment-686

4
swissspidy

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

0
Jonathan Joosten