Est-il possible de changer le slug de base de l'auteur en fonction de son rôle? Par exemple, les auteurs obtiennent example.com/ninja/%username% et les abonnés obtiennent example.com/trainee/%username%?
Je pense à quelque chose comme:
add_action('init', 'set_new_author_base');
function set_new_author_base() {
global $wp_rewrite;
if($user->role == 'subscriber')
$author_slug = 'trainee';
$wp_rewrite->author_base = $author_slug;
} elseif($user->role == 'author') {
$author_slug = 'ninja';
$wp_rewrite->author_base = $author_slug;
}
}
Cela devrait fonctionner pour les visiteurs non enregistrés s'ils naviguent sur le site et cela devrait fonctionner pour les auteurs connectés et les abonnés eux-mêmes.
url-rewriting
slug
user-roles
Maxim Zubarev
la source
la source
Réponses:
Dans votre exemple, le modèle de réécriture de l'auteur passe de
/author/[authorname]/
à/[author_level]/[author_name]/
. Si nous permettons[author_level]
d'être quoi que ce soit, nous entrerons en conflit avec les règles pour les pages, car il/[anything]/[anything]/
peut s'agir d'une archive d'auteur ou d'une sous-page régulière.Pour cette raison, ma solution suppose que vous avez un nombre limité de niveaux d'auteur, nous pouvons donc les mettre explicitement dans les règles de réécriture. Ce
/ninja/[anything]/
sera donc une archive d'auteur, mais ce/not-ninja/[anything]/
sera une page régulière.La modification de la structure des URL se compose toujours de deux parties: la modification des URL que WordPress acceptera et la modification des URL que WordPress générera. Nous allons d'abord modifier les URL que WordPress acceptera en introduisant une nouvelle balise de réécriture et en définissant notre base d'auteur sur cette balise.
Si vous vérifiez les règles de réécriture résultantes avec mon analyseur de réécriture, vous remarquerez qu'il contient des règles supplémentaires pour les
/[author-level]/
pages simples . Cela se produit car WordPress génère des règles pour chaque partie de répertoire qui contient une balise de réécriture, comme%author_level%
. Nous n'en avons pas besoin, alors filtrez toutes les règles de réécriture d'auteur qui ne contiennent pas deauthor_name
:Maintenant, WordPress devrait accepter les URL utilisant ce nouveau modèle. La seule chose qui reste à faire est de modifier les URL qu'il génère lorsqu'il crée un lien vers une archive d'auteur. Pour cela, vous pouvez vous connecter au
author_link
filtre, comme cet exemple très basique:la source
trainee/john/
etninja/john/
maintenant les deux URI valides pour le même auteur? Il n'y a aucun moyen de créer un permalien canonique pour un auteur simplement en changeant les règles de réécriture, non? Auser_meta
pourrait aider…author_link
filtre. Vous pouvez également ajouter une «vérification canonique» supplémentaire, tout comme le noyauredirect_canonical()
, si vous vous souciez vraiment de cela. Je ne sais pas comment çauser_meta
va aider ici? Monauthor_link
exemple est trop simple, il a besoin d'une logique spécifique au site pour séparer les ninjas des stagiaires.author_link
filtre vous-même. (En fait, vous l'avez dit - les auteurs sont des ninjas et les abonnés sont des stagiaires - mais mon code devrait être suffisant pour compléter cette partie et être suffisamment générique pour que les autres puissent en apprendre aussi.)author_rewrite_rules
à chaque chargement de page?