He descubierto dos formas de hacer esto:
- Página de autor con una regla de reescritura personalizada
- Archivos de plantillas personalizadas emparejados con una regla de reescritura
El primero es más simple de implementar, pero puede que no funcione en todas las circunstancias (una de las cuales describiré pronto).
Regla de reescritura personalizada
Encontré esta solución hace unos días aquí: Reescritura de URL
Y aquí está el código, con comentarios:
// Define the author levels you want to use
$custom_author_levels = array( 'user', 'leader' );
// On init, add a new author_level rewrite tag and add it to the author_base property of wp_rewrite
add_action( 'init', 'wpleet_init' );
function wpleet_init()
{
global $wp_rewrite;
$author_levels = $GLOBALS['custom_author_levels'];
// Define the tag and use it in the rewrite rule
add_rewrite_tag( '%author_level%', '(' . implode( '|', $author_levels ) . ')' );
$wp_rewrite->author_base = '%author_level%';
}
// The previous function creates extra author_name rewrite rules that are unnecessary.
//This function tests for and removes them
add_filter( 'author_rewrite_rules', 'wpleet_author_rewrite_rules' );
function wpleet_author_rewrite_rules( $author_rewrite_rules )
{
foreach ( $author_rewrite_rules as $pattern => $substitution ) {
if ( FALSE === strpos( $substitution, 'author_name' ) ) {
unset( $author_rewrite_rules[$pattern] );
}
}
return $author_rewrite_rules;
}
Luego puedes usar la plantilla incorporada author.php, modificando a tu gusto.
Sinceramente, revise el enlace que se menciona arriba, ya que Jan Fabry hace un excelente trabajo explicando todo.
Vars de consulta y plantillas de página
Para el tema en el que estaba trabajando mientras descubría estas soluciones, necesitaba servir una página personalizada basada en un valor meta del usuario (una identificación separada). Mi cliente no quería que el nombre de usuario o la ID de usuario fueran visibles públicamente, por lo que creamos una capa separada.
¿El único problema? Por el momento, no hay una forma clara de cómo utilizar la API de reescritura para consultar por meta claves / valores. Afortunadamente, había una solución.
En tu archivo functions.php ...
// Create the query var so that WP catches your custom /user/username url
add_filter( 'query_vars', 'wpleet_rewrite_add_var' );
function wpleet_rewrite_add_var( $vars )
{
$vars[] = 'user';
return $vars;
}
Y luego, debe crear una nueva etiqueta y regla de reescritura para que sepa cuándo y cómo manejar la nueva var. de consulta.
add_rewrite_tag( '%user%', '([^&]+)' );
add_rewrite_rule(
'^user/([^/]*)/?',
'index.php?user=$matches[1]',
'top'
);
Una vez que haya hecho esto, simplemente necesita "capturar" cuando se está sirviendo la consulta var, y luego redirigir a la plantilla de su elección:
add_action( 'template_redirect', 'wpleet_rewrite_catch' );
function wpleet_rewrite_catch()
{
global $wp_query;
if ( array_key_exists( 'user', $wp_query->query_vars ) ) {
include (TEMPLATEPATH . '/user-profile.php');
exit;
}
}
Solo asegúrate de haber creado user-profile.php.
En mi propio ejemplo, creé una tercera función que coincidía con la "ID de usuario pública" con el id_usuario real a través de la tabla $ wpdb- > usermeta, y pasé la información a la plantilla.
Si necesita crear una plantilla diferente del resto de su tema, recuerde que con get_header, puede especificar un nombre:
get_header( 'user' );
Que llamará al archivo header-user.php.
Conclusión
Ambas soluciones son válidas y funcionan. El segundo ofrece una capa separada de "seguridad", ya que no revela las ID de usuario ni los nombres de usuario, si otras personas pueden navegar por los perfiles.
Espero que eso ayude, avíseme si tiene alguna pregunta.