¿Es posible cambiar la babosa base del autor de acuerdo con su papel? Por ejemplo, los autores obtienen example.com/ninja/%username% y los suscriptores obtienen example.com/trainee/%username%?
Estoy pensando en 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;
}
}
Debería funcionar para los visitantes no registrados si navegan por el sitio y debería funcionar para los autores y suscriptores registrados.
url-rewriting
slug
user-roles
Maxim Zubarev
fuente
fuente
Respuestas:
En su ejemplo, el autor reescribe los cambios de patrón de
/author/[authorname]/
a/[author_level]/[author_name]/
. Si permitimos[author_level]
que haya algo, entraremos en conflicto con las reglas de las páginas, ya que/[anything]/[anything]/
puede ser un archivo de autor o una subpágina normal.Por esta razón, mi solución asume que tiene un número limitado de niveles de autor, por lo que podemos ponerlos explícitamente en las reglas de reescritura. Entonces
/ninja/[anything]/
será un archivo de autor, pero/not-ninja/[anything]/
será una página normal.Cambiar la estructura de la URL siempre consta de dos partes: cambiar las URL que WordPress aceptará y cambiar las URL que generará WordPress. Primero, cambiaremos las URL que WordPress aceptará introduciendo una nueva etiqueta de reescritura y configurando nuestra base de autores para esa etiqueta.
Si verifica las reglas de reescritura resultantes con mi Analizador de reescritura , notará que contiene reglas adicionales para las
/[author-level]/
páginas simples . Esto sucede porque WordPress genera reglas para cada parte del directorio que contiene una etiqueta de reescritura, como%author_level%
. No los necesitamos, así que filtre todas las reglas de reescritura de autores que no contenganauthor_name
:Ahora WordPress debería aceptar URL usando este nuevo patrón. Lo único que queda por hacer es cambiar las URL que genera cuando crea un enlace a un archivo de autor. Para eso, puede conectarlo al
author_link
filtro, como este ejemplo muy básico:fuente
trainee/john/
yninja/john/
ahora ambos URI válidos para el mismo autor? No hay forma de crear un enlace permanente canónico para un autor simplemente cambiando las reglas de reescritura, ¿verdad? Auser_meta
podría ayudar ...author_link
filtro. También puede agregar un "chequeo canónico" extra al igual que lo hace el núcleoredirect_canonical()
, si realmente le importa esto. No sé cómouser_meta
ayudará aquí? Miauthor_link
ejemplo es demasiado simple, necesita una lógica específica del sitio para separar a los ninjas de los aprendices.author_link
filtro usted mismo. (En realidad, lo dijiste, los autores son ninjas y los suscriptores son aprendices, pero mi código debería ser suficiente para completar esa parte y ser lo suficientemente genérico para que otros también puedan aprender de él)author_rewrite_rules
ejecuta en cada página de carga?