J'ai découvert deux façons de faire cela:
- Page d'auteur avec une règle de réécriture personnalisée
- Un fichier de modèle personnalisé associé à une règle de réécriture
La première est plus simple à implémenter, mais peut ne pas fonctionner dans toutes les circonstances (dont une que je décrirai bientôt).
Règle de réécriture personnalisée
J'ai trouvé cette solution il y a quelques jours ici: Réécriture d'URL
Et voici le code, avec des commentaires:
// 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;
}
Vous pouvez ensuite utiliser le modèle author.php intégré, en modifiant le contenu de votre cœur.
Sincèrement, vérifiez le lien ci-dessus, car Jan Fabry fait un excellent travail pour tout expliquer.
Requête Vars et modèles de page
Pour le thème sur lequel je travaillais en découvrant ces solutions, j'avais besoin de servir une page personnalisée basée sur une méta-valeur utilisateur (un ID distinct). Mon client ne voulait pas que le nom d'utilisateur ou l'ID utilisateur soit visible publiquement, nous avons donc créé une couche distincte.
Le seul problème? Pour le moment, il n'y a pas de moyen clair d'utiliser l'API de réécriture pour interroger par méta clés / valeurs. Heureusement, il y avait une solution.
Dans votre fichier 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;
}
Et puis, vous devez créer une nouvelle balise de réécriture et une règle pour qu'il sache quand et comment gérer la nouvelle var de requête.
add_rewrite_tag( '%user%', '([^&]+)' );
add_rewrite_rule(
'^user/([^/]*)/?',
'index.php?user=$matches[1]',
'top'
);
Une fois que vous avez fait cela, il vous suffit de "capturer" lorsque la requête var est servie, puis de rediriger vers le modèle de votre choix:
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;
}
}
Assurez-vous simplement d'avoir créé user-profile.php.
Dans mon propre exemple, j'ai créé une troisième fonction qui faisait correspondre "l'ID utilisateur public" à l'identifiant utilisateur réel via la table $ wpdb-> usermeta, et transmis les informations au modèle.
Si vous devez créer un modèle différent du reste de votre thème, n'oubliez pas qu'avec get_header, vous pouvez spécifier un nom:
get_header( 'user' );
Qui appellera le fichier header-user.php.
Conclusion
Ces deux solutions sont valables et fonctionnelles. La seconde offre une couche distincte de "sécurité" car elle ne révèle pas les identifiants d'utilisateur ou les noms d'utilisateur, si d'autres personnes pourront parcourir les profils.
J'espère que cela vous aidera, faites-moi savoir si vous avez des questions.
J'ai trouvé cela plus tôt aujourd'hui et j'ai apporté quelques modifications au code @bybloggers avec la différence qu'au lieu d'utiliser template_redirect, je change la demande pour afficher une page statique, ce qui signifie que vous pouvez maintenant ajouter tout ce que vous aimez à un modèle de page et l'utiliser sur celui-ci. page.
Espagnol -> usuario = utilisateur <- anglais
la source
get_page_by_path('page-slug')->ID
. N'oubliez pas non plus l'utilisationflush_rewrite_rules
, j'ajouterais donc:add_action( 'after_switch_theme', 'flush_rewrite_rules' );
Ceci est mon code de travail basé sur la réponse de @bybloggers (merci en passant) J'apprends juste que nous ne devrions pas utiliser le hook template_redirect puis quitter php, car certaines choses peuvent cesser de fonctionner en raison de l'interruption brutale du code d'exécution de php.
L'explication est ici: https://markjaquith.wordpress.com/2014/02/19/template_redirect-is-not-for-loading-templates/
Donc, nous devrions utiliser le hook template_include. Avec ce crochet, il n'est pas nécessaire d'utiliser la méthode de redirection et de sortie.
Et l'autre différence est que j'avais juste besoin de www.server.com/myaccount sans / userid.
Voici le code:
la source
Une autre façon est d'utiliser Buddypress qui a cette fonction intégrée même si le plugin a encore plus de fonctionnalités qui peuvent ne pas être intéressantes.
http://wordpress.org/extend/plugins/buddypress/
la source