Ist es möglich, die Basisbasis des Autors entsprechend seiner Rolle zu ändern? Zum Beispiel erhalten Autoren example.com/ninja/%username% und Abonnenten example.com/trainee/%username%?
Ich denke an etwas wie:
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;
}
}
Es sollte für nicht registrierte Besucher funktionieren, wenn sie die Website durchsuchen, und es sollte für die angemeldeten Autoren und Abonnenten selbst funktionieren.
url-rewriting
slug
user-roles
Maxim Zubarev
quelle
quelle
Antworten:
In Ihrem Beispiel ändert sich der Autor Rewrite - Muster aus
/author/[authorname]/
zu/[author_level]/[author_name]/
. Wenn wir etwas zulassen[author_level]
, geraten wir in Konflikt mit den Regeln für Seiten, da/[anything]/[anything]/
es sich entweder um ein Autorenarchiv oder eine reguläre Unterseite handeln kann.Aus diesem Grund geht meine Lösung davon aus, dass Sie eine begrenzte Anzahl von Autorenebenen haben, sodass wir sie explizit in die Umschreiberegeln aufnehmen können. Es
/ninja/[anything]/
wird also ein Autorenarchiv sein, aber es/not-ninja/[anything]/
wird eine reguläre Seite sein.Das Ändern der URL-Struktur besteht immer aus zwei Teilen: Ändern der von WordPress akzeptierten URLs und Ändern der von WordPress generierten URLs. Zuerst ändern wir die URLs, die WordPress akzeptiert, indem wir ein neues Rewrite-Tag einführen und unsere Autorenbasis auf dieses Tag setzen.
Wenn Sie die resultierenden Umschreiberegeln mit meinem Rewrite Analyzer überprüfen, werden Sie feststellen, dass er zusätzliche Regeln für die einfachen
/[author-level]/
Seiten enthält. Dies geschieht, weil WordPress Regeln für jeden Verzeichnisteil generiert, der ein Umschreibetag enthält, wie z%author_level%
. Wir brauchen diese nicht, also filtern Sie alle Regeln zum Umschreiben von Autoren heraus, die keinauthor_name
:Jetzt sollte WordPress URLs mit diesem neuen Muster akzeptieren. Sie müssen nur noch die URLs ändern, die beim Erstellen eines Links zu einem Autorenarchiv generiert werden. Dafür können Sie sich in den
author_link
Filter einhängen , wie in diesem sehr einfachen Beispiel:quelle
trainee/john/
und sind nichtninja/john/
beide URIs für denselben Autor gültig? Es gibt keine Möglichkeit, einen kanonischen Permalink für einen Autor zu erstellen, indem Sie einfach die Umschreiberegeln ändern, oder? Auser_meta
könnte helfen ...author_link
Filter verknüpft . Sie können auch einen zusätzlichen "kanonischen Check" hinzufügen, genau wie der Kernredirect_canonical()
, wenn Sie sich wirklich dafür interessieren. Ich weiß nicht, wieuser_meta
ich hier helfen kann. Meinauthor_link
Beispiel ist zu einfach, es benötigt eine ortsspezifische Logik, um die Ninjas von den Auszubildenden zu trennen.author_link
Filter selbst ausfüllen. (Eigentlich haben Sie es gesagt - Autoren sind Ninjas und Abonnenten sind Auszubildende - aber mein Code sollte ausreichen, um diesen Teil zu vervollständigen und allgemein genug zu sein, damit auch andere daraus lernen können.)author_rewrite_rules
auf jeder Seite geladen?