É possível alterar a lesma da base do autor de acordo com seu papel? Por exemplo, os autores obtêm example.com/ninja/%username% e os assinantes obtêm example.com/trainee/%username%?
Estou pensando em algo como:
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;
}
}
Ele deve funcionar para visitantes não registrados se eles navegarem no site e deve funcionar para os autores conectados e os próprios assinantes.
url-rewriting
slug
user-roles
Maxim Zubarev
fonte
fonte
Respostas:
No seu exemplo, o autor reescreve as alterações de padrão de
/author/[authorname]/
para/[author_level]/[author_name]/
. Se permitirmos[author_level]
qualquer coisa, entraremos em conflito com as regras das páginas, porque/[anything]/[anything]/
pode ser um arquivo de autor ou uma subpágina regular.Por esse motivo, minha solução supõe que você tenha um número limitado de níveis de autor, para que possamos explicitamente colocá-los nas regras de reescrita. Então,
/ninja/[anything]/
será um arquivo de autor, mas/not-ninja/[anything]/
será uma página regular.Alterar a estrutura da URL sempre consiste em duas partes: alterar as URLs que o WordPress aceitará e alterar as URLs que o WordPress irá gerar. Primeiro, alteraremos os URLs que o WordPress aceitará, introduzindo uma nova marca de reescrita e definindo nossa base de autores para essa marca.
Se você verificar as regras de reescrita resultantes com o meu Rewrite Analyzer , notará que ele contém regras extras para as
/[author-level]/
páginas comuns . Isso acontece porque o WordPress gera regras para cada parte do diretório que contém uma tag de reescrita, como%author_level%
. Não precisamos disso, portanto, filtre todas as regras de reescrita de autores que não contenhamauthor_name
:Agora, o WordPress deve aceitar URLs usando esse novo padrão. A única coisa que resta a fazer é alterar os URLs que ele gera quando cria um link para um arquivo de autor. Para isso, você pode conectar-se ao
author_link
filtro, como este exemplo muito básico:fonte
trainee/john/
eninja/john/
agora ambos os URIs válidos para o mesmo autor? Não há como criar um permalink canônico para um autor apenas alterando as regras de reescrita, certo? Auser_meta
poderia ajudar ...author_link
filtro. Você também pode adicionar uma "verificação canônica" extra, assim como o núcleoredirect_canonical()
, se você realmente se importa com isso. Não sei comouser_meta
vai ajudar aqui? Meuauthor_link
exemplo é muito simples, ele precisa de lógica específica do site para separar os ninjas dos treinandos.author_link
filtro por conta própria. (Na verdade, você disse a ele - Autores são ninjas e Assinantes são estagiários -, mas meu código deve ser suficiente para completar a operação e ser suficientemente genérica para que outros possam aprender com ele também.)author_rewrite_rules
executado em todas as páginas carregadas?