重定向未登录、不是帖子作者和不是管理员的用户。前端

时间:2021-10-02 作者:Jake Billington

PHP新手,我尝试通过一个代码片段插件执行以下操作,但不断出现严重错误:

将所有未登录用户限制在主页、关于和定价页面。如果试图访问其他页面,请重定向到;“无许可”;消息页面

  • 如果用户已登录,如果他们是帖子作者,则只允许他们查看前端的帖子。如果尝试,请重定向到;“无许可”;第页我尝试过插件,但没有什么能满足我的需要,

    非常感谢您的帮助,代码如下:

    add_action( \'template_redirect\', \'redirect_non_permitted_users\' );
    
    function redirect_non_permitted_users () {
         $userID = get_user_id();
         $authorID = get_the_author_meta(ID);
    
        if(current_user_can(\'manage_options\')){
     
        }
    
        elseif( $userID <> $authorID || ! is_user_logged_in() || ! is_front_page() || ! is_page(\'about\') || ! is_page(\'pricing\')){
            wp_redirect(\'https://www.example.com/no-permission/\'); 
        exit;
        }   
    }
    

  • 2 个回复
    SO网友:Howard E

    get_user_id() 不是一个函数,因此您将得到一个错误。此外,您可以通过调用$post 全局和访问属性post_author

    add_action( \'template_redirect\', \'redirect_non_permitted_users\' );
    
    function redirect_non_permitted_users () {
        if (is_admin()) return;
        $userID = get_current_user_id();
        global $post;
        $authorID = absint($post->post_author);
        
        if( $userID !== $authorID && ! is_user_logged_in() && ! is_front_page() && ! is_page(\'about\') && ! is_page(\'pricing\')){
            wp_redirect(\'https://www.example.com/no-permission/\');
            exit;
        }
    }
    

    SO网友:Jake Billington

    这似乎是我想要的。问题是“无权限”页面上的$userID与$authorID冲突,导致重定向循环。

    add_action( \'template_redirect\', \'redirect_non_permitted_users\' );
    
    function redirect_non_permitted_users () {
      if (is_admin()) return;
      $userID = get_current_user_id();
      global $post;
      $authorID = absint($post->post_author);
    
      if (is_page(\'no-permission\') || current_user_can(\'manage_options\')){
      return;
      }  
    
      if( ($userID !== $authorID || ! is_user_logged_in()) && ! 
      is_front_page() && ! is_page(\'about\') && ! is_page(\'pricing\')){
        wp_redirect(\'https://www.example.com/no-permission/\');
        exit;
      }
    }
    

    相关推荐