私は以下を達成する方法を探しています。
ユーザーのグループ
彼らはサイトにログインします
各生徒は「カスタムダッシュボードウィジェット」を見ることができます
各ウィジェットは、そのログイン学生のために管理者によって書かれた個人的なメッセージを運ぶでしょう。 A]コースの合計日数B]合計出席者数C]支払われるべきおよび支払われるべき料金。
WPで可能ですか、それとも他のCMSを探してこれらを達成するべきですか?
これは、ユーザープロファイルのカスタムメタフィールドを使用して(管理者にのみ表示されます)、このメタを含む個々のダッシュボードウィジェットを作成することで解決できます(特定の基準が満たされた場合にのみ表示されます)。
ユーザープロファイルページにフィールドを追加することができます。
Justin Tadlockのチュートリアルに従ってください。 カスタムユーザープロファイルフィールドの追加と使用
このQ&A を使用して管理者以外のユーザーのフィールドを非表示にする
FrankBültgeのチュートリアルに従って、 WordPress Dashboardウィジェットを追加してください
前の回答 は別のプラグインを使用しましたが、コメントスレッドは変更を説明します。
よくコーディングされ保守されていないことを考えれば、 Advanced Custom Fields は非常に便利です。
/wp-admin/user-edit.php?user_id=7
以下は、各ユーザーにパーソナライズされたメッセージを表示します(または表示しません)。
/**
* 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;
}
の結果:
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
}