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.
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
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