web-dev-qa-db-ja.com

管理者からのカスタム通知を表示するカスタムダッシュボードウィジェットを作成する方法

私は以下を達成する方法を探しています。

  1. ユーザーのグループ

  2. 彼らはサイトにログインします

  3. 各生徒は「カスタムダッシュボードウィジェット」を見ることができます

  4. 各ウィジェットは、そのログイン学生のために管理者によって書かれた個人的なメッセージを運ぶでしょう。 A]コースの合計日数B]合計出席者数C]支払われるべきおよび支払われるべき料金。

WPで可能ですか、それとも他のCMSを探してこれらを達成するべきですか?

1
tushonline

これは、ユーザープロファイルのカスタムメタフィールドを使用して(管理者にのみ表示されます)、このメタを含む個々のダッシュボードウィジェットを作成することで解決できます(特定の基準が満たされた場合にのみ表示されます)。

ユーザープロファイルページにフィールドを追加することができます。

1)手動で

2)プラグインで

前の回答 は別のプラグインを使用しましたが、コメントスレッドは変更を説明します。
よくコーディングされ保守されていないことを考えれば、 Advanced Custom Fields は非常に便利です。

2a)カスタムユーザーフィールドの設定

acf config thumbnail snapshot
クリックすると拡大します

2b)管理者によるユーザーの編集

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

2c)ダッシュボードを表示している管理者以外のユーザー

以下は、各ユーザーにパーソナライズされたメッセージを表示します(または表示しません)。

/**
 * 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;
}

の結果:
enter image description here


Bonus code
ACFにちょっとしたUXを追加する:[メッセージチェックボックスを有効にする]がチェックされているかどうかに応じて、メッセージテキストボックスを表示/非表示にします。
最初のチェックボックスをチェックし、次にテキストボックスをチェックすると、ACF設定のフィールドの順序を変更することができます。

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