概要
cptui_map_meta_cap
フィルタは、WordPressのプラグイン「Custom Post Type UI」において、カスタム投稿タイプのメタキャパビリティのマッピングを制御するために使用されます。このフィルタを利用することで、特定のユーザーのロールに基づいて、カスタム投稿タイプの操作(作成、編集、削除など)を制御することができます。通常、次のような機能を実装する際に便利です。
- 特定のユーザーにのみ投稿を編集する権限を与える。
- 投稿タイプごとに異なるアクセス権限を設定する。
- カスタム投稿タイプの適切なユーザー権限を割り当てる。
- プラグインの設定画面に特定の権限で表示を制御する。
- セキュリティを強化するため、特定のロールを持つユーザーにのみアクセスを制限する。
- テーマや他のプラグインとの連携で、アクセス制御を柔軟に行う。
構文
add_filter('cptui_map_meta_cap', 'your_function_name', 10, 3);
パラメータ
$capabilities
(array) – カスタム投稿タイプに関連付けられたキャパビリティ。$post_type
(string) – 対象のカスタム投稿タイプ。$user
(WP_User) – 現在のユーザーオブジェクト。
戻り値
- (array) – マッピングされたキャパビリティの配列。
バージョン
- Custom Post Type UI: 1.0.0以降
- WordPress: 4.0以降
この関数のアクションでの使用可能性
アクション | 使用可能性 |
---|---|
mu_plugin_loaded | |
registered_post_type | 〇 |
plugins_loaded | |
wp_roles_init | |
setup_theme | |
after_setup_theme | |
set_current_user | |
init | |
register_sidebar | |
wp_loaded | |
send_headers | |
parse_query | |
pre_get_posts | |
wp | |
template_redirect | |
get_header | |
wp_head |
サンプルコード
サンプルコード1: 特定のユーザーに編集権限を与える
add_filter('cptui_map_meta_cap', 'give_edit_permission', 10, 3);
function give_edit_permission($capabilities, $post_type, $user) {
if ($user->ID == 1) { // ユーザーID 1 に特別な編集権限を与える
$capabilities['edit_post'] = true;
}
return $capabilities;
}
このコードは、ユーザーID 1 に特別に投稿編集の権限を付与します。
サンプルコード2: 投稿タイプごとの権限を変更
add_filter('cptui_map_meta_cap', 'custom_post_type_capabilities', 10, 3);
function custom_post_type_capabilities($capabilities, $post_type, $user) {
if ($post_type === 'my_custom_post_type') {
$capabilities['delete_post'] = 'delete_my_custom_post_type';
}
return $capabilities;
}
特定のカスタム投稿タイプに対して削除権限を変更する例です。
サンプルコード3: ロールに基づくアクセス制御
add_filter('cptui_map_meta_cap', 'restrict_by_role', 10, 3);
function restrict_by_role($capabilities, $post_type, $user) {
if (!in_array('administrator', $user->roles)) {
$capabilities['edit_post'] = false; // 管理者以外は編集不可
}
return $capabilities;
}
このサンプルは、管理者以外のユーザーがカスタム投稿を編集できないようにします。
サンプルコード4: 特定ユーザーに作成権限を付与
add_filter('cptui_map_meta_cap', 'grant_create_permission', 10, 3);
function grant_create_permission($capabilities, $post_type, $user) {
if ($user->ID === get_option('admin_email')) { // 管理者のメールアドレスを持つユーザーに作成権限
$capabilities['create_posts'] = true;
}
return $capabilities;
}
特定のユーザー(管理者のメールアドレスを持つ)に投稿作成権限を付与する例です。
サンプルコード5: 複数のロールによる権限設定
add_filter('cptui_map_meta_cap', 'multi_role_based_capabilities', 10, 3);
function multi_role_based_capabilities($capabilities, $post_type, $user) {
if (in_array('editor', $user->roles) || in_array('author', $user->roles)) {
$capabilities['edit_post'] = true; // エディターまたはオーサーには編集権限を付与
} else {
$capabilities['edit_post'] = false; // その他のロールには編集権限なし
}
return $capabilities;
}
エディターまたはオーサーの役割を持つユーザーに編集権限を与え、それ以外には権限を与えない例です。