ページの編集をバックエンドから特定のユーザーだけに制限するにはどうすればよいですか?
私はいくつかのプラグインを試してみましたが、私はプラグインなしでそれを行うことが私のための方法であると思いました。
これを解決するためにどのような対策を講じることができますか?
これは2段階で行うことができます。まず、目的のページが他のユーザーに表示されないようにするために、ページ/wp-admin/edit.php?post_type=page
にフックを追加します。そして、許可されていないユーザーがページに直接アクセスしようとするのを/wp-admin/post.php?post=ID&action=edit
にリダイレクトするためのもう1つのフック。
ここでは投稿タイプはpage
ですが、他のものに変更することができます。コメントに示されている調整を行います。
/**
* Adjust the following:
* post_type
* User ID
* Post ID
*/
add_action( 'load-edit.php', 'load_custom_filter_wpse_94387' );
add_action( 'load-post.php', 'block_page_access_wpse_94387' );
/**
* Executed only in /wp-admin/edit.php
*
* Checks current post type and bail if not correct
*/
function load_custom_filter_wpse_94387()
{
global $typenow;
// Not the correct post type, do nothing
if( 'page' != $typenow ) // <--- adjust
return;
add_filter( 'posts_where' , 'posts_where_wpse_94387' );
}
/**
* If not authorized user, remove page from listing
*/
function posts_where_wpse_94387( $where )
{
$current_user = wp_get_current_user();
if ( 2 == $current_user->ID ) // <--- adjust
return $where;
$where .= ' AND ID != 119'; // <--- adjust
return $where;
}
/**
* Check if unauthorized user is trying to access restricted page
*/
function block_page_access_wpse_94387()
{
// Check for post=119, if it is not this one, do nothing
if( !isset( $_GET['post'] ) || '119' != $_GET['post'] ) // <--- adjust
return;
// Check for user, if allowed user, do nothing
$current_user = wp_get_current_user();
if ( 2 == $current_user->ID ) // <--- adjust
return;
// Invalid attempt to edit the page, redirect
wp_redirect( admin_url( 'edit.php?post_type=page' ) );
exit();
}
関連するQ&A:
- 私のコードを置く場所:plugin or functions.php?
- 管理インターフェースの投稿数(公開済み、下書き、未添付)を更新しました