Há duas maneiras que eu descobri fazendo isso:
- Página de autor com uma regra de reescrita personalizada
- Arquivos de modelo personalizados emparelhados com uma regra de reescrita
A primeira é mais simples de implementar, mas pode não funcionar em todas as circunstâncias (uma das quais descreverei em breve).
Regra de reconfiguração personalizada
Encontrei esta solução há alguns dias aqui: Reescrita de URL
E aqui está o código, com comentários:
// 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;
}
Você pode usar o modelo author.php incorporado, modificando o conteúdo do seu coração.
Atenciosamente, verifique o link listado acima, pois Jan Fabry faz um excelente trabalho explicando tudo.
Vars de consulta e modelos de página
Para o tema em que estava trabalhando ao descobrir essas soluções, eu precisava veicular uma página personalizada com base em um meta-valor do usuário (um ID separado). Meu cliente não queria que o nome de usuário ou o ID do usuário estivesse visível publicamente, por isso criamos uma camada separada.
O único problema? No momento, não há uma maneira clara de como usar a API Rewrite para consultar por meta chaves / valores. Felizmente, havia uma solução.
No seu arquivo 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;
}
E então, você precisa criar uma nova marca e regra de reescrita para que ele saiba quando e como lidar com a nova consulta var.
add_rewrite_tag( '%user%', '([^&]+)' );
add_rewrite_rule(
'^user/([^/]*)/?',
'index.php?user=$matches[1]',
'top'
);
Depois de fazer isso, basta "capturar" quando a consulta var estiver sendo veiculada e, em seguida, redirecionar para o modelo de sua escolha:
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;
}
}
Apenas certifique-se de ter criado o user-profile.php.
No meu exemplo, criei uma terceira função que correspondia ao "ID do usuário público" com o user_id real por meio da tabela $ wpdb-> usermeta e passei as informações para o modelo.
Se você precisar criar um modelo diferente do resto do seu tema, lembre-se de que com get_header, você pode especificar um nome:
get_header( 'user' );
O qual chamará o arquivo header-user.php.
Conclusão
Ambos são soluções válidas e funcionais. O segundo oferece uma camada separada de "segurança", pois não revela IDs de usuário ou nomes de usuário, se outras pessoas puderem navegar pelos perfis.
Espero que ajude, deixe-me saber se você tiver alguma dúvida.
Encontrei isso hoje cedo e fiz algumas modificações no código @bybloggers com a diferença de que, em vez de usar o template_redirect, altero a solicitação para mostrar uma página estática, o que significa que agora você pode adicionar o que quiser a um modelo de página e usá-lo nesse página.
Espanhol -> usuario = usuário <- inglês
fonte
get_page_by_path('page-slug')->ID
. Também não se esqueça de usarflush_rewrite_rules
, por isso gostaria de acrescentar:add_action( 'after_switch_theme', 'flush_rewrite_rules' );
Este é o meu código de trabalho baseado na resposta @bybloggers (obrigado por falar nisso). Acabei de aprender que não devemos usar o gancho template_redirect e sair do php, porque algumas coisas podem parar de funcionar devido à interrupção abrupta do código de execução do php.
A explicação está aqui: https://markjaquith.wordpress.com/2014/02/19/template_redirect-is-not-for-loading-templates/
Portanto, devemos usar o gancho template_include. Com esse gancho, não há necessidade de usar o método de redirecionamento e saída.
E a outra diferença é que eu só precisava de www.server.com/myaccount sem o / userid.
Este é o código:
fonte
Outra maneira é usar o Buddypress que possui esse recurso, mesmo que o plug-in tenha ainda mais funcionalidades que podem não ser do seu interesse.
http://wordpress.org/extend/plugins/buddypress/
fonte