WordPress如何仅为订阅者给予访问页面的权限

6vl6ewon  于 2022-11-02  发布在  WordPress
关注(0)|答案(4)|浏览(152)

我试图给予特定页面的访问权限只为我的订阅用户角色,如果其他人与其他然后订阅用户角色或非角色用户想访问此页面重定向到自定义登录页面,我尝试与下面的片段,但我认为它有问题,你能请帮助我修复这个
示例:限制对特定页的访问

add_action( 'template_redirect', function() {

    // Get global post
    global $post;

    // Prevent access to page with ID 1052
    $page_id = 1052;
    if ( is_page() && ( $post->post_parent == $page_id || is_page( $page_id ) ) ) {

        // Set redirect to true by default
        $redirect = true;

        // If logged in do not redirect
        // You can/should place additional checks here based on user roles or user meta
        if ( current_user_can( 'subscriber' ) || !is_user_logged_in()) {
            $redirect = false;
        }

        // Redirect people without access to login page
        if ( $redirect ) {
            wp_redirect( get_site_url().'/custom-url-login' ); exit;
        }

    }

} );
qvtsj1bj

qvtsj1bj1#

您可以像这样重构代码:

add_action( 'template_redirect', 'checking_current_user' );

function checking_current_user() 
{

  global $post;

  global $current_user;

  $page_id = 1052;

  if ( 
      ( $post->post_parent == $page_id || is_page( $page_id ) )
      &&  
      ( !in_array('subscriber', $current_user->roles) )
     ) 
  {
    wp_safe_redirect( site_url('/custom-url-login') );
    exit;
  }

}

这个答案已经过测试,工作正常!

bf1o4zei

bf1o4zei2#

这难道不是你想要的吗

// If user role 'subscriber' & logged in do not redirect
    // You can/should place additional checks here based on user roles or user meta
    if ( current_user_can( 'subscriber' ) && is_user_logged_in()) {
        $redirect = false;
    }
7ivaypg9

7ivaypg93#

WordPress管理 Jmeter 盘〉外观〉主题文件编辑器〉主题函数functions.php
通过在底部添加以下内容来编辑代码:

// Allow subscribers to see Private posts and pages
 $subRole = get_role( 'subscriber' ); 
 $subRole->add_cap( 'read_private_pages' );
 $subRole->add_cap( 'read_private_posts' );

然后将您选择的页面/帖子从“公开”更改为“私人”可见性:
页面〉所有页面〉页面〉快速编辑〉私人(复选框)
你可以做一个重定向,替换functions.php底部的siteurl,使用:

// Redirect to page on login
function loginRedirect( $redirect_to, $request_redirect_to, $user ) {
    if ( is_a( $user, 'WP_User' ) && $user->has_cap( 'edit_posts' ) === false ) {
        return get_bloginfo( 'siteurl' );
    }
    return $redirect_to; }

add_filter( 'login_redirect', 'loginRedirect', 10, 3 );

或URL重定向到“仅为订户提供的页面”,例如:
https://WordPress.com/wp-login.php?user_id=3&redirect_to=https%3A%2F%2Fwordpress.com%2Fabout%2F#top

polhcujo

polhcujo4#

首先,你必须检查用户是否登录,如果用户没有登录,那么你需要重定向用户到登录页面,登录后,你需要应用代码代码,然后它会工作正常。

add_action( 'template_redirect', 'check_current_user' );
function check_current_user(){
 global $post, $current_user;
$page_id = 1052;
if ( is_page() && ( $post->post_parent == $page_id || is_page( $page_id ) ) ) {
   if ( is_user_logged_in() ) {
      /*==Now check user is subscriber==*/
      $current_user = wp_get_current_user();
      $role = $current_user->roles;
      $currentRole = $role[0];
      if($currentRole == "subscriber"){
         $redirect = false;
      }else{
         $redirect = true;
      }
  }else{
     wp_safe_redirect( site_url('/custom-url-login') );
  }
 }
}

相关问题