J'ai suivi ce guide pour commencer à créer un site WordPress basé sur les membres pour mon client actuel.
Ils dirigent une entreprise de gestion immobilière et ont besoin que le site serve de portail pour mettre en contact les propriétaires et les locataires de ces immeubles avec les divers schémas indiquant l'emplacement des compteurs électriques et des drains d'égout. Le gros problème que je rencontre est qu'aucun des plugins que j'ai essayés ne me permettait de restreindre complètement une page ou une publication à un utilisateur (ou à quelques utilisateurs).
Les plugins que j'utilise sont les suivants: Membres, Rôles de menu de navigation et Profile Builder (version gratuite).
Je suis à l'aise pour coder la solution dans mes fichiers de thème, mais honnêtement, je ne sais pas trop par où commencer ni quelle sera la meilleure solution (plugins, codage ou autre chose?).
Il y aura donc trois rôles principaux: administrateur, propriétaire du bâtiment et locataire du bâtiment (quelqu'un qui gère un magasin dans un centre commercial, par exemple).
Je prépare des pages pour les différents bâtiments, ainsi que des articles répertoriant les différents éléments de service (électricité, incendie, CVC, déchets, etc.). L'objectif est qu'un utilisateur se connecte et ne puisse voir que le contenu relatif à son/ses bâtiment (s). Je dois donc pouvoir affecter ces pages et ces publications aux utilisateurs du back-end d'une manière ou d'une autre.
Je peux facilement le faire en fonction du rôle de l'utilisateur, mais je dois le faire en fonction d'utilisateurs spécifiques.
L'ensemble de ce site s'adresse essentiellement aux utilisateurs disposant d'un compte. Idéalement, le client souhaite pouvoir attribuer facilement un accès lui-même une fois le site en ligne.
Ce que nous pouvons faire ici est de créer une méta-boîte pour chaque message et de lui affecter un utilisateur. Ensuite, sur notre page de publication, vérifiez si l’utilisateur actuel est lié à la publication ou non.
S'ils ne sont pas liés à cela, redirigez-les vers la page d'accueil ou ailleurs.
Je vais utiliser un menu déroulant pour la boîte à méta et le remplir avec des utilisateurs.
// Hook into the add_meta_boxes action
add_action( 'add_meta_boxes', 'kreigd_user_metabox' );
function kreigd_user_metabox() {
// Create a new metabox
add_meta_box(
'kreigd-user-list', // ID
'User List', // Title
'kreigd_user_list_callback', // Callback
array('post','page'), // Post types
'normal',
'high'
);
}
// Output the content for metabox
function kreigd_user_list_callback() {
// $post is already set, and contains an object: the WordPress post
global $post;
$values = get_post_custom( get_the_ID() );
// Get the current assigned user
$user_id = isset( $values['user_id'][0] ) ? $values['user_id'][0] : 0;
// We'll use this nonce field later on when saving.
wp_nonce_field( 'kreigd_nonce', 'kreigd_user_list_nonce' );?>
<p>
<label for="kreigd_select"><?php _e('Choose a user','text-domain'); ?></label>
<select name="kreigd_select" id="kreigd_select"><?php
$users = get_users(); // Retrieve a list of users
// Run a loop and add every user to the list
foreach ( $users as $user ){ ?>
<option
value="<?php echo esc_html( $user->ID ); ?>"
<?php selected( $user->ID, $user_id ); ?>
>
<?php echo esc_html( $user->display_name ); ?>
</option><?php
} ?>
</select>
</p><?php
}
// Save the user to meta box on post save
add_action( 'save_post', 'mymovieflaws_meta_box_save' );
function mymovieflaws_meta_box_save( $post_id ){
// Don't save it on autosave
if( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE )
return;
// If the nonce is not correct, or the value is not set, return
if( !isset( $_POST['kreigd_select'] ) || !wp_verify_nonce( $_POST['kreigd_user_list_nonce'], 'kreigd_nonce' ) )
return;
// If current user doesn't have the privilege to save a post, return
if( !current_user_can( 'edit_post', $post_id ) )
return;
$allowed = array( 'a' => array( 'href' => array() ) );
// Save the user's ID
update_post_meta( $post_id, 'user_id', wp_kses( $_POST['kreigd_select'], $allowed ) );
}
Vous pouvez utiliser ceci en utilisant bootstrap select et ajouter une option de recherche à votre sélecteur. De cette façon, vous pouvez rapidement trouver chaque utilisateur, sans avoir à parcourir toute la liste.