Ci sono due modi che ho scoperto facendo questo:
- Pagina dell'autore con una regola di riscrittura personalizzata
- File di modello personalizzati associati a una regola di riscrittura
Il primo è più semplice da implementare, ma potrebbe non funzionare in tutte le circostanze (una delle quali descriverò presto).
Regola di riscrittura personalizzata
Ho trovato questa soluzione alcuni giorni fa qui: URL Rewriting
Ed ecco il codice, con commenti:
// 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;
}
È quindi possibile utilizzare il modello incorporato author.php, modificando il contenuto del tuo cuore.
Cordiali saluti, controlla il link sopra elencato, poiché Jan Fabry fa un ottimo lavoro spiegando tutto.
Query Vars e modelli di pagina
Per il tema su cui stavo lavorando durante la scoperta di queste soluzioni, dovevo servire una pagina personalizzata basata su un meta valore dell'utente (un ID separato). Il mio cliente non voleva che il nome utente o l'ID utente fossero visibili pubblicamente, quindi abbiamo creato un livello separato.
L'unico problema? Al momento, non esiste un modo chiaro per utilizzare l'API di riscrittura per eseguire query in base a meta chiavi / valori. Fortunatamente, c'era una soluzione.
Nel tuo file 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;
}
Quindi, è necessario creare un nuovo tag e regola di riscrittura in modo che sappia quando e come gestire la nuova query var.
add_rewrite_tag( '%user%', '([^&]+)' );
add_rewrite_rule(
'^user/([^/]*)/?',
'index.php?user=$matches[1]',
'top'
);
Una volta fatto questo, devi semplicemente "catturare" quando viene servita la query var, e quindi reindirizzare al modello che preferisci:
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;
}
}
Assicurati solo di aver creato user-profile.php.
Nel mio esempio, ho creato una terza funzione che corrispondeva all '"ID utente pubblico" all'attuale user_id tramite la tabella $ wpdb-> usermeta e ho passato le informazioni al modello.
Se devi creare un modello diverso dal resto del tuo tema, ricorda che con get_header puoi specificare un nome:
get_header( 'user' );
Che chiamerà il file header-user.php.
Conclusione
Entrambe sono valide soluzioni funzionanti. Il secondo offre un livello separato di "sicurezza" in quanto non rivela ID utente o nomi utente, se altre persone saranno in grado di sfogliare i profili.
Spero che ti aiuti, fammi sapere se hai qualche domanda.