概要
woocommerce_rest_check_permissions
フィルタは、WooCommerce REST APIのエンドポイントに対するアクセス権を確認するために使用されるフックです。このフィルタは、特定の条件下でリクエストを許可または拒否するために活用されます。以下の場面で特によく使われます。
- アクセス制限を実装するため
- APIエンドポイントへのセキュリティ強化
- 特定のユーザーや役割に基づいてリクエストを確認するため
- REST APIのカスタマイズ要件に対応するため
- デバッグやログ記録の目的でのアクセス権確認
- 非認証のリクエストを制御するため
構文
add_filter('woocommerce_rest_check_permissions', 'custom_check_permissions', 10, 4);
パラメータ
bool $permission
: 現在の許可状態。string $context
: リクエストのコンテキスト(例えば、‘read’, ‘edit’など)。WP_REST_Request $request
: リクエストオブジェクト。string $type
: APIエンドポイントのタイプ。
戻り値
bool
: 利用者に対するアクセス権があるかどうかを示す真偽値。true
であればアクセスを許可し、false
であれば拒否します。
使用可能なプラグインWooCommerceのバージョン
- WooCommerce 3.0.0以降
使用可能なワードプレスのバージョン
- WordPress 4.4以降
この関数のアクションでの使用可能性
アクション | 使用例 |
---|---|
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('woocommerce_rest_check_permissions', 'restrict_api_access', 10, 4);
function restrict_api_access($permission, $context, $request, $type) {
if (!is_user_logged_in()) {
return false; // ログインしていないユーザーにはアクセスを拒否
}
return $permission; // 他の条件でアクセス許可
}
このサンプルは、ログインしていないユーザーにはWooCommerce APIへのアクセスを拒否します。
サンプルコード2
add_filter('woocommerce_rest_check_permissions', 'allow_admin_access', 10, 4);
function allow_admin_access($permission, $context, $request, $type) {
if (current_user_can('administrator')) {
return true; // 管理者には全てのAPIリクエストを許可
}
return $permission;
}
このサンプルは、管理者ユーザーにはAPIの全リクエストを許可します。
サンプルコード3
add_filter('woocommerce_rest_check_permissions', 'custom_order_permission', 10, 4);
function custom_order_permission($permission, $context, $request, $type) {
if ($type === 'order' && !current_user_can('manage_woocommerce')) {
return false; // 注文に関するリクエストは権限がないと拒否
}
return $permission;
}
このサンプルは、「order」タイプのリクエストに対して、WooCommerceの管理権限がないと拒否します。
サンプルコード4
add_filter('woocommerce_rest_check_permissions', 'log_api_requests', 10, 4);
function log_api_requests($permission, $context, $request, $type) {
// APIリクエストのログを記録
error_log('API request: ' . $request->get_route());
return $permission; // 権限は既存のまま
}
このサンプルは、APIリクエストが行われる度にその内容をサーバーログに記録します。
サンプルコード5
add_filter('woocommerce_rest_check_permissions', 'check_user_role', 10, 4);
function check_user_role($permission, $context, $request, $type) {
if (!in_array('customer', (array) wp_get_current_user()->roles)) {
return false; // 顧客以外のユーザーにはアクセスを拒否
}
return $permission;
}
このサンプルは、顧客役割を持つユーザーのみがAPIにアクセスできるようにします。