例えば「アバター画像が未登録のユーザー」のみの投稿を制限するなど、「投稿者」「編集者」といった権限グループ単位ではなく「ユーザー単位」かつ「特定条件」において機能を制限する方法を紹介します。
前提
要件例
冒頭にもありますが、今回は以下の要件を例とします。
- 目的: 共同投稿者全員にアバター画像を登録してほしい
- 対象: 「投稿者」権限かつアバター画像が未登録のユーザー
- 処理: アバター画像が登録されていなければ、投稿できないようにする
プラグイン
プラグイン「WP User Avatar」を利用します。
WordPress標準アバターの「Gravatar」は利用方法が面倒なので、WP User Avatarで管理画面からユーザーが簡単にアバター画像をアップロードできるようにします。
WP User Avatarを使うことでデータベースのユーザーメタ情報に wp_user_avatar
という値が加わります。
この値の有無でコントロールする処理になります。
functions.php の編集
以下のように functions.php
に追記します。
if (current_user_can('author')) { //ログイン中ユーザーのデータ取得 global $current_user; get_currentuserinfo(); //WP User Avatar の値取得 $wp_user_avatar = get_user_meta($current_user -> ID, 'wp_user_avatar', true); if(!$wp_user_avatar){ //管理画面左メニューから「投稿」削除 function admin_menu_remove_post () { global $menu; unset($menu[5]); //「投稿」メニュー } add_action('admin_menu', 'admin_menu_remove_post'); //ログイン時上部管理メニューから「新規」削除 function admin_bar_remove_post( $wp_admin_bar ) { $wp_admin_bar->remove_node('new-content'); } add_action( 'admin_bar_menu', 'admin_bar_remove_post', 1000 ); } }
処理を列挙すると以下になります。
- ログイン中のユーザーが「投稿者」かの判断
- 投稿者であればログイン中ユーザーのデータ取得
- ログイン中ユーザーデータから
wp_user_avatar
を取得 wp_user_avatar
が空(false)なら投稿機能を制限する
解説
まず一行目の以下。
if (current_user_can('author'))
このif文で投稿者ユーザーのみを対象にしています。管理者など他のユーザーは影響を受けません。
3,4行目の以下。
global $current_user; get_currentuserinfo();
$current_user
へログインしているユーザー自身のメタデータが格納されます。
プラグインによって拡張されたメタデータもすべて引っこ抜けます。
7,8行目の以下。
$wp_user_avatar = get_user_meta($current_user -> ID, 'wp_user_avatar', true); if(!$wp_user_avatar){
$current_user
に格納されている、WP User Avatarの値 wp_user_avatar
を取り出しています。そしてwp_user_avatar
の値が無い場合=アバター画像が未登録の場合のif文に続けています。
このif文以降の内容は、管理画面の左メニューと、ログイン時の上部管理メニューのアクションフックにかけて、投稿リンクを出さないようにしています。
まとめ
「ログインユーザーの条件」でコントロールしたい時は $current_user
のメタデータを参照します。
プロフィール設定や最終ログイン日なども取得できるので、様々な条件でカスタマイズできます。