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.
Encontré esto hoy e hice algunas modificaciones al código @bybloggers con la diferencia de que en lugar de usar template_redirect, cambio la solicitud para mostrar una página estática, eso significa que ahora puede agregar lo que quiera a una plantilla de página y usarla en ese página.
Español -> usuario = usuario <- Inglés
fuente
get_page_by_path('page-slug')->ID
. Tampoco olvides el usoflush_rewrite_rules
, así que agregaría como:add_action( 'after_switch_theme', 'flush_rewrite_rules' );
Este es mi código de trabajo basado en la respuesta de @bybloggers (gracias, por cierto), acabo de enterarme de que no deberíamos usar template_redirect hook y luego salir de php, porque algunas cosas pueden dejar de funcionar debido a la interrupción abrupta del código de ejecución de php.
La explicación está aquí: https://markjaquith.wordpress.com/2014/02/19/template_redirect-is-not-for-loading-templates/
Entonces, deberíamos estar usando el gancho template_include. Con este enlace, no es necesario usar el método de redireccionamiento y salida.
Y la otra diferencia es que solo necesitaba www.server.com/myaccount sin el / userid.
Este es el código:
fuente
Otra forma es usar Buddypress que tiene este incorporado incluso si el complemento tiene aún más funcionalidades que pueden no ser de interés.
http://wordpress.org/extend/plugins/buddypress/
fuente