プラグインCustom Post Type UIのcptui_map_meta_capフィルタの使用方法・解説

概要

cptui_map_meta_capフィルタは、WordPressのCustom Post Type UIプラグインによって提供され、カスタム投稿タイプのメタ能力を管理するために使用されます。このフィルタを使用することで、カスタム投稿タイプに特有の権限や能力を柔軟に設定することが可能です。一般的には、以下のような機能を実装する際によく使われます。

  • カスタム投稿タイプへのアクセス制御
  • 特定のユーザー役割に基づくカスタム権限の設定
  • 投稿作成時のユーザー権限のカスタマイズ
  • 異なるメタ能力を使用したカスタマイズ
  • プラグインやテーマの互換性確保のための権限管理
  • 管理者以上のユーザーのみに表示させるカスタムサポート

構文

add_filter( 'cptui_map_meta_cap', 'your_function_name', 10, 2 );

パラメータ

  • $cap_array: カスタム投稿タイプにマッピングされた能力の配列。
  • $post_type: 現在処理中のカスタム投稿タイプのスラッグ。

戻り値

フィルタは、カスタム能力の配列を返します。

使用可能なバージョン

  • Custom Post Type UI: 最新版 / 2023年10月現在
  • WordPress: 最新版 / 2023年10月現在

この関数のアクションでの使用可能性

アクション 使用例
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: 権限をカスタマイズする

このサンプルコードでは、特定のユーザー役割に対してカスタム投稿タイプの権限を変更しています。

function custom_post_type_capabilities( $cap_array, $post_type ) {
    if ( 'your_custom_post_type' === $post_type ) {
        $cap_array = array(
            'edit_post' => 'edit_custom_post',
            'delete_post' => 'delete_custom_post',
            'publish_posts' => 'publish_custom_posts',
            'read_post' => 'read_custom_post',
        );
    }
    return $cap_array;
}
add_filter( 'cptui_map_meta_cap', 'custom_post_type_capabilities', 10, 2 );

(引用元: https://wordpress.org/support/article/roles-and-capabilities/)

サンプル2: 複数のカスタム権限を設定する

この例では、カスタム投稿タイプに対して複数の権限を設定しています。

function multiple_capabilities( $cap_array, $post_type ) {
    if ( 'portfolio' === $post_type ) {
        $cap_array['edit_post'] = 'edit_portfolio_item';
        $cap_array['delete_post'] = 'delete_portfolio_item';
    }
    return $cap_array;
}
add_filter( 'cptui_map_meta_cap', 'multiple_capabilities', 10, 2 );

(引用元: https://developer.wordpress.org/reference/hooks/cptui_map_meta_cap/)

サンプル3: 特定の条件で権限を変える

特定のユーザーの条件に応じて権限を動的に変更します。

function dynamic_capabilities_by_user( $cap_array, $post_type ) {
    if ( is_user_logged_in() ) {
        $cap_array['edit_post'] = 'edit_others_posts';
    }
    return $cap_array;
}
add_filter( 'cptui_map_meta_cap', 'dynamic_capabilities_by_user', 10, 2 );

(引用元: https://wordpress.stackexchange.com/questions/25801/how-to-implement-custom-user-capabilities-for-custom-post-types)

サンプル4: ユーザーのロールに基づく権限変更

ユーザーのロールに応じて異なる権限を設定します。

function role_based_capabilities( $cap_array, $post_type ) {
    if ( 'event' === $post_type ) {
        $user = wp_get_current_user();
        if ( in_array( 'editor', (array) $user->roles ) ) {
            $cap_array['edit_post'] = 'edit_event';
        }
    }
    return $cap_array;
}
add_filter( 'cptui_map_meta_cap', 'role_based_capabilities', 10, 2 );

(引用元: https://www.wpbeginner.com/wp-tutorials/how-to-create-custom-post-types-in-wordpress/)

サンプル5: カスタムメニューの権限設定

カスタムメニューに対する編集権限を設定する例です。

function menu_capabilities( $cap_array, $post_type ) {
    if ( 'menu_custom_post_type' === $post_type ) {
        $cap_array['edit_post'] = 'manage_options';
    }
    return $cap_array;
}
add_filter( 'cptui_map_meta_cap', 'menu_capabilities', 10, 2 );

(引用元: https://www.smashingmagazine.com/2015/03/creating-custom-post-types-wordpress/)

この関数について質問する


上の計算式の答えを入力してください