WordPress : Comment puis-je avoir une page sur un site qui n’est pas une ‘Page’ au sens de WordPress ?

Publié par Jean-Michel le

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_Queryet 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_includecrochet. 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 -->

Catégories : Wordpress

Jean-Michel

Jean-Michel est en charge de la partie blog du site. Il met en place la stratégie de contenu et répond aux questions fréquentes sur Wordpress.

0 commentaire

Laisser un commentaire

Avatar placeholder

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *