ワードプレスの寄稿者のメニューを”メディア”,’投稿’,’プロフィール’だけにし、自分の投稿だけが見えるようにするコードをご紹介いたします。

管理画面のメニューを’メディア’,’投稿’,’プロフィール’だけにする

※下記のコードはテーマのfunctions.phpに追加いただくと動作します。

function wp_contributor_dashboard () {
    global $menu;
    $user = wp_get_current_user();
    if ( isset( $user->roles ) && is_array( $user->roles ) ) {
        if ( in_array( 'contributor', $user->roles )) {
			$newmenu = array();
			$allowmenu = array('メディア','投稿','プロフィール');
			
			foreach($menu as $m){
				if(in_array($m[0],$allowmenu)){
					$newmenu []=$m;
				}
			}
			$menu = $newmenu;
		}
    }
}
add_action('admin_menu', 'wp_contributor_dashboard');

このコードでは$allowmenuの配列の文字列に含まれているメニューだけをワードプレスのメニュー配列として許可し、管理画面に表示するコードです。

ついでにログイン後にプロフィール画面に必ずジャンプするようにします。

※次のコードをさらにfunctions.phpに追加すると、寄稿者権限contributorがログイン後にプロフィール画面に必ずジャンプします。

function login_redirect_contributor( $redirect_to, $request, $user ){
    if ( isset( $user->roles ) && is_array( $user->roles ) ) {
        if ( in_array( 'contributor', $user->roles )) {
             $redirect_to = admin_url("profile.php");
        }
    }
    return $redirect_to;
}
add_filter( 'login_redirect', 'login_redirect_contributor', 10, 3 );

寄稿者にメディアの仕様やアップロードを許可し、自分の投稿だけが見えるようにする

ワードプレスの寄稿者はなぜか画像等のメディアのアップロードが許可されません。
こちらを修正し、寄稿者が記事に画像等を追加できるようにします。

※下記のコードはテーマのfunctions.phpに追加いただくと動作します。

function allow_contributor_uploads() {
	$user = wp_get_current_user();
	if ( isset( $user->roles ) && is_array( $user->roles ) ) {
                if ( in_array( 'contributor', $user->roles )) {
			if ( !current_user_can('upload_files') ){
				 $contributor = get_role('contributor');
				 $contributor->add_cap('upload_files');
			}
		}
	}
}
add_action('admin_init', 'allow_contributor_uploads');

寄稿者に自分の投稿やメディアだけが見えるようにするには下記のコードをさらにfunctions.phpに追加します。

/*自分の投稿だけ見えるように*/
function restrict_posts_to_current_user( $query ) {
	$user = wp_get_current_user();
    if ( isset( $user->roles ) && is_array( $user->roles ) ) {
        if ( in_array( 'contributor', $user->roles )) {
			if ( $query->is_main_query() ) {
				$user_id = get_current_user_id();
				if ( $user_id ) {
					$query->set( 'author', $user_id );
				}
			}
		}
	}
}
add_action( 'pre_get_posts', 'restrict_posts_to_current_user' );

/*自分のメディアだけ見えるように*/
function restrict_media_library_to_current_user( $query ) {
	$user = wp_get_current_user();
    if ( isset( $user->roles ) && is_array( $user->roles ) ) {
        if ( in_array( 'contributor', $user->roles )) {
			$user_id = get_current_user_id();
			if ( $user_id ) {
				$query['author'] = $user_id;
			}
		}
	}
    return $query;
}
add_filter( 'ajax_query_attachments_args', 'restrict_media_library_to_current_user' );

ご参考になりましたら幸いです。

WordPress ワードプレスの管理画面のカスタマイズや修正、機能追加のご依頼・ご相談はWPドクターまでお気軽にお送りください