Можно ли изменить автора базы слизняк в зависимости от его роли? Например, авторы получают example.com/ninja/%username%, а подписчики получают example.com/trainee/%username%?
Я думаю о чем-то вроде:
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;
}
}
Это должно работать для незарегистрированных посетителей, если они просматривают сайт, и это должно работать для зарегистрированных авторов и самих подписчиков.
url-rewriting
slug
user-roles
Максим Зубарев
источник
источник
Ответы:
В вашем примере автор переписывает изменения шаблона с
/author/[authorname]/
на/[author_level]/[author_name]/
. Если мы позволим[author_level]
быть чем-либо, мы вступим в конфликт с правилами для страниц, потому что это/[anything]/[anything]/
может быть либо архив автора, либо обычная подстраница.По этой причине мое решение предполагает, что у вас есть ограниченное количество уровней автора, поэтому мы можем явно включить их в правила перезаписи. Так
/ninja/[anything]/
будет авторский архив, но/not-ninja/[anything]/
будет обычная страница.Изменение структуры URL всегда состоит из двух частей: изменение URL-адресов, которые будет принимать WordPress, и изменение URL-адресов, которые будет генерировать WordPress. Сначала мы изменим URL-адреса, которые WordPress будет принимать, введя новый тег перезаписи и установив базу наших авторов для этого тега.
Если вы проверите полученные правила перезаписи с помощью моего Rewrite Analyzer, вы заметите, что он содержит дополнительные правила для простых
/[author-level]/
страниц. Это происходит потому, что WordPress генерирует правила для каждой части каталога, которая содержит тег перезаписи, например%author_level%
. Нам это не нужно, поэтому отфильтруйте все правила переписывания авторов, которые не содержатauthor_name
:Теперь WordPress должен принимать URL-адреса, используя этот новый шаблон. Осталось только изменить URL-адреса, которые он генерирует при создании ссылки на архив автора. Для этого вы можете подключиться к
author_link
фильтру, как этот очень простой пример:источник
trainee/john/
иninja/john/
теперь оба действительными URI одного и того же автора? Невозможно создать каноническую постоянную ссылку для одного автора, просто изменив правила перезаписи, верно? Аuser_meta
может помочь…author_link
фильтр. Вы также можете добавить дополнительную «каноническую проверку», как этоredirect_canonical()
делает ядро , если вы действительно заботитесь об этом. Я не знаю, какuser_meta
здесь поможет? Мойauthor_link
пример слишком прост, ему нужна специфическая для сайта логика, чтобы отделить ниндзя от учеников.author_link
фильтр самостоятельно. (На самом деле вы это сказали - авторы - ниндзя, а подписчики - стажеры, - но моего кода должно быть достаточно, чтобы завершить эту часть и быть достаточно универсальным, чтобы другие тоже могли учиться на нем.)author_rewrite_rules
на каждой странице загрузка?