Hay dos formas en que he descubierto esto:
- Página de autor con una regla de reescritura personalizada
- Un archivo de plantilla personalizado emparejado con una regla de reescritura
El primero es más simple de implementar, pero puede no funcionar 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 puede usar la plantilla incorporada author.php, modificando el contenido de su corazón.
Sinceramente, revise el enlace mencionado anteriormente, ya que Jan Fabry hace un excelente trabajo explicando todo.
Consultar Vars y plantillas de página
Para el tema en el que estaba trabajando mientras descubría estas soluciones, necesitaba publicar una página personalizada basada en un metavalor del usuario (un ID por separado). 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 realizar consultas por meta claves / valores. Afortunadamente, había una solución.
En su 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 consulta var.
add_rewrite_tag( '%user%', '([^&]+)' );
add_rewrite_rule(
'^user/([^/]*)/?',
'index.php?user=$matches[1]',
'top'
);
Una vez que haya hecho esto, simplemente necesita "atrapar" cuando se está sirviendo la consulta var, y luego redirigir a la plantilla que elija:
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 el "ID de usuario público" con el ID de 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 son soluciones válidas que funcionan. El segundo ofrece una capa separada de "seguridad", ya que no revela ID de usuario o nombres de usuario, si otras personas podrán navegar por los perfiles.
Espero que ayude, avíseme si tiene alguna pregunta.