Je cherche un moyen d'atteindre les objectifs suivants:
Un groupe d'étudiants utilisateurs
Ils se connectent au site
Chaque étudiant peut voir un "Widget (s) de tableau de bord personnalisé"
Chaque widget portera un message personnel écrit par l'administrateur pour cet étudiant connecté. Tels que A] Nombre total de jours dans le cours B] Participation totale C] Frais payés et dus.
Est-ce possible avec WP ou devrions-nous chercher un autre CMS pour les atteindre?
Cela peut être résolu en utilisant des champs méta personnalisés dans le profil utilisateur (visibles uniquement par les administrateurs), puis en créant un widget de tableau de bord individuel contenant cette méta (visible uniquement si certains critères sont remplis).
L'ajout de champs à la page de profil d'utilisateur peut être fait:
Suivre le tutoriel de Justin Tadlock: Ajouter et utiliser des champs de profil utilisateur personnalisés
Utilisation de cette Q & A pour masquer les champs pour les utilisateurs non-administrateurs
Après le tutoriel de Frank Bültge: Ajoutez des widgets WordPress Dashboard
La réponse précédente précédente utilisait un autre plugin, mais le fil Commentaires expliquait la modification.
En plus d'être bien codé et maintenu, Les champs personnalisés avancés sont incroyablement pratiques.
/wp-admin/user-edit.php?user_id=7
Ce qui suit affichera (ou non) un message personnalisé à chaque utilisateur.
/**
* Add Dashboard Widget
*/
add_action('wp_dashboard_setup', 'wpse_51591_wp_dashboard_setup');
/**
* Only builds the Widget if the display message checkbox is enabled in the user editing screen
*/
function wpse_51591_wp_dashboard_setup()
{
global $current_user;
get_currentuserinfo();
$show_msg = get_field( 'user_message_enable', 'user_' . $current_user->ID );
$widget_title = 'Personal Messages to ' . $current_user->data->display_name;
if( $show_msg )
wp_add_dashboard_widget( 'wpse_user_personal_message', $widget_title, 'wpse_51591_wp_dashboard_per_user' );
}
/**
* Content of Dashboard Widget
* Shows the content of each user's custom message
*/
function wpse_51591_wp_dashboard_per_user()
{
global $current_user;
get_currentuserinfo();
$the_msg = get_field( 'user_message_text', 'user_' . $current_user->ID );
echo $the_msg;
}
Résultats en:
Bonus code
Ajout d’un peu d’UX dans ACF: affiche/masque la zone de texte du message si la case à cocher Activer le message est cochée ou non.
Mieux vaut modifier l’ordre des champs dans la configuration d’ACF, cochez d’abord la case puis la zone de texte.
add_action( 'admin_head-user-edit.php', 'wpse_51591_acf_profile' );
add_action( 'admin_head-user-new.php', 'wpse_51591_acf_profile' );
function wpse_51591_acf_profile()
{
?>
<script type="text/javascript">
jQuery(document).ready( function($)
{
/* Wait 1.4s for ACF to be ready */
setTimeout(function() {
// find our checkbox
var the_check = $('#acf-user_message_enable').find('input:last');
// default state
if( $(the_check).is(':checked') )
$('#acf-user_message_text').fadeIn();
else
$('#acf-user_message_text').fadeOut();
// live changes
$(the_check).change(function ()
{
if( $(this).is(':checked') )
$('#acf-user_message_text').fadeIn();
else
$('#acf-user_message_text').fadeOut();
});
}, 1400);
});
</script>
<?php
}