WordPress如何仅允许subscriber角色访问特定页面并修复相关代码
修复后的订阅者专属页面访问控制代码
原代码存在两个核心问题:
- 逻辑写反:原判断条件将未登录用户也纳入了不需要重定向的范围,和需求完全相悖
- 权限判断不严谨:直接用
current_user_can校验角色名存在小概率兼容性问题,更稳妥的方式是先获取用户角色列表再匹配
add_action( 'template_redirect', function() { global $post; // 替换为你要限制的目标页面ID $target_page_id = 1052; // 匹配目标页面及其子页面 if ( is_page() && ( $post->post_parent == $target_page_id || is_page( $target_page_id ) ) ) { $redirect = true; // 仅已登录且角色为subscriber的用户不需要重定向 if ( is_user_logged_in() ) { $current_user = wp_get_current_user(); $user_roles = $current_user->roles; if ( in_array( 'subscriber', $user_roles ) ) { $redirect = false; } } // 无权限用户跳转至自定义登录页 if ( $redirect ) { wp_redirect( get_site_url() . '/custom-url-login' ); exit; } } } );
使用说明
- 替换
$target_page_id的数值为你实际要限制的页面ID即可生效 - 如果不需要限制该页面的子页面,删除判断条件里的
$post->post_parent == $target_page_id ||部分即可
内容的提问来源于stack exchange,提问作者jahn
相关产品推荐
相关产品推荐

