web-dev-qa-db-fra.com

Comment créer un widget de tableau de bord personnalisé pour afficher une notification personnalisée à partir de l'administrateur?

Je cherche un moyen d'atteindre les objectifs suivants:

  1. Un groupe d'étudiants utilisateurs

  2. Ils se connectent au site

  3. Chaque étudiant peut voir un "Widget (s) de tableau de bord personnalisé"

  4. 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?

1
tushonline

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:

1) manuellement

2) par un plugin

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.

2a) Configuration des champs utilisateur personnalisés

acf config thumbnail snapshot
Cliquez pour agrandir

2b) Administrateur modifiant un utilisateur

/wp-admin/user-edit.php?user_id=7
acf user editing

2c) Utilisateurs non administrateurs visualisant le tableau de bord

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:
enter image description here


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
}
3
brasofilo