WordPress : Comment puis-je avoir une page sur un site qui n’est pas une ‘Page’ au sens de WordPress ?
J’ai créé un système dans lequel les utilisateurs peuvent s’inscrire et ensuite être recherchés sur le frontend. La recherche utilise WP_User_Query
et fonctionne très bien.
Je veux que chaque utilisateur ait sa propre page de profil, qui affiche toutes sortes d’informations liées à son compte. Toutes les données sont là, mais je ne sais pas comment ni où je peux créer ces pages de profil.
Les URL de ces pages seront /member/[slug]/[ID] EG : /member/mike/32
Je voudrais un fichier de thème qui est appelé lorsque cette route est atteinte. J’ai pensé à avoir une règle de réécriture dans .htaccess et un fichier plat .php qui appelle wp-load.php
, puis tente de charger l’en-tête et le pied de page. Cela me semble cependant extrêmement absurde.
Toute aide est appréciée.
Solution n°1 trouvée
Vous pouvez ajouter un nouveau point de terminaison pour votre page de profil. Il n’y a pas besoin de gérer quoi que ce soit avec le htaccess. WordPress le fera pour vous.
codex : add_rewrite_endpoint
Une autre façon (demi-solution) consiste à créer un fichier de modèle et à le charger via le template_include
crochet. Mais il n’obtiendra pas le nom d’utilisateur (tel qu’il est).
add_filter( 'template_include', array($this, 'profile_page'), 99 );
function profile_page($templates){
if ( is_page( 'profile-page' ) ) {
$new_template = YOURPLUGIN_DIR .'templates/profile-page';
if ( '' != $new_template ) {
return $new_template ;
}
}
}
Créez une page avec un lien permanent défini sur la page de profil et créez des fonctions et le contenu de la page de profil…
ÉDITER:
Voici une classe complète de réécriture pour une page d’utilisateur de profil, sans avoir besoin de créer une page.
class wpse242114{
public function __construct(){
add_action( 'wp_loaded', array($this,'_flush_rules') );
add_filter( 'rewrite_rules_array', array($this,'_insert_rewrite_rules') );
add_filter( 'query_vars', array($this,'_insert_query_vars') );
add_filter( 'template_include', array($this, '_get_plugin_template'), 99 );
}
public function _flush_rules() {
$rules = get_option( 'rewrite_rules' );
if ( ! isset( $rules['(profile)/(d*)$'] ) ) {
global $wp_rewrite;
$wp_rewrite->flush_rules();
}
}
public function _insert_rewrite_rules( $rules ) {
$newrules = array();
$newrules['(profile)/(d*)$'] = 'index.php?pagename=$matches[1]&id=$matches[2]';
return $newrules + $rules;
}
public function _insert_query_vars( $vars ) {
array_push( $vars, 'id' );
return $vars;
}
public function _get_plugin_template($template){
global $wp_query;
if ( $wp_query->query['name'] == 'profile') {
$new_template = APIKEYABLE_DIR .'includes/templates/page-login.php';
if ( '' != $new_template ) {
return $new_template ;
}
}
return $template;
}
}
L’exemple de fichier modèle :
<?php get_header(); ?>
<div class="container">
<div id="main-grid" class="row">
<div id="primary" class="content-area col-md-8">
<main id="main" class="site-main" role="main">
<?php
$userid = get_current_user_id();
$user = new WP_User($userid);
if ( $user->exists() ) {
// do something
}
</main><!-- #main -->
</div><!-- #primary -->
<?php get_sidebar(); ?>
</div><!-- .row -->
0 commentaire