J'ai créé un point de terminaison de réécriture avec la fonction add_rewrite_endpoint … voici la structure complète:
// Register to query vars
add_filter( 'query_vars', 'add_query_vars');
function add_query_vars( $vars ) {
$vars[] = 'account';
return $vars;
}
// Add rewrite endpoint
add_action( 'init', 'account_page_endpoint' );
function account_page_endpoint() {
add_rewrite_endpoint( 'account', EP_ROOT );
}
// Account template
add_action( 'template_include', 'account_page_template' );
function account_page_template( $template ) {
if( get_query_var( 'account', false ) !== false ) {
return locate_template( array( 'account.php' ) );
}
return $template;
}
Cela fonctionne très bien jusqu'à présent quand j'entre une url comme exemple.com/account/username ... mais les liens du site sont toujours comme exemple.com?account=username.
Comment puis-je rediriger de la version du paramètre pour réécrire la version? Est-il nécessaire d'ajouter une règle de réécriture supplémentaire ou existe-t-il une fonction que ces liens doivent exécuter?
Les liens de compte sur le site lui-même sont créés par cette fonction:
function account_url( $user_id ) {
$user = get_userdata( $user_id );
return add_query_arg( 'account', strtolower( $user->user_login ), get_home_url() );
}
Les règles de réécriture ne gèrent que les demandes entrantes, elles ne sont pas impliquées dans la génération de lien.
Le système principal de réécriture WordPress est analysé en interne avec PHP; vous ne verrez aucune modification dans un fichier .htaccess
lorsque vous ajoutez un point de terminaison. Les règles de base .htaccess disent essentiellement "S'il ne s'agit pas d'une demande de fichier ou de répertoire physique sur le serveur, transmettez la demande à WordPress".
Votre fonction account_url
doit gérer à la fois les cas "moche" et "joli" quand elle génère les URL du compte. Nous pouvons regarder la fonction intégrée get_permalink
pour voir comment WordPress gère cela, voici une version abrégée:
$permalink = get_option('permalink_structure');
if ( '' != $permalink ) {
// output a pretty permalink
} else {
// output an ugly permalink
}
L'option permalink_structure
contient le modèle choisi si de jolis permaliens sont activés. Nous savons que de jolis permaliens sont désactivés s'ils sont vides.
EDIT 2
Pour utiliser de jolis permaliens, tels que exemple.com/account/john, vous devez l'activer dans votre zone d'administration, dans les paramètres de permalien et l'activer sur votre serveur. Vous nous avez dit dans des commentaires que vous utilisiez nginx. Je connais mieux Apache. Voici donc un tutoriel qui pourrait vous aider.
https://www.cyberciti.biz/faq/how-to-configure-nginx-for-wordpress-permalinks/
MODIFIER
Je suis allé trop vite, oubliez ma suggestion de add_rewrite_rule, je pense qu'avec Add_rewrite_endpoint, vous devez utiliser le hook "template_redirect" au lieu du crochet "template_include".
END EDIT
Selon le code que vous indiquez, je l’ajouterais à votre fonction account_page_endpoint
add_rewrite_rule('^account/([a-z0-9]+)/?', 'index.php?account=$matches[1]', 'top');
Il ne modifie pas le fichier .htaccess, mais vous pouvez actualiser les règles.
Vous devrez peut-être actualiser les règles après cette modification.
Deux possibilités:
-Si vous ajoutez, juste après la ligne de code ci-dessus, l'appel de la fonction de réécriture de la couleur comme ceci:
flush_rewrite_rules();
- ou vous pouvez aller dans votre zone d’administration, dans les paramètres de permalien et réenregistrer vos paramètres actuels.