Making a client page

时间:2017-06-08 作者:Chris Pink

我做了一些研究,结果都是“使用插件”。我不想这样做有几个原因,尤其是因为大多数插件都有膨胀,我完全有能力以轻量级的方式这样做,而答案将代表其他插件。

客户端可以作为自定义角色从任何位置登录client/clientusername - 由管理员创建的页面仅包含管理员放置的材料(即客户端没有编辑页面的功能)

  • 如果客户端以外的任何其他人登录该页面(通过键入url),他们将重定向到主页
    function my_login_redirect( $url, $request, $user ){
        if( $user && is_object( $user ) && is_a( $user, \'WP_User\' ) ) {
            if( $user->has_cap( \'client\' ) ) {
                    $client = $user->user_login;
                    $url = home_url( $client, \'relative\');
            }
        }
        return $url;
    }
    add_filter(\'login_redirect\', \'my_login_redirect\', 10, 3 );
    
    我意识到还有很多事情要做,但我将把这个留在这里讨论。

  • 1 个回复
    SO网友:Chris Pink

    对于客户端角色,请使用此;

        // Add a client user role
    
        $result = add_role( \'client\', __(
    
        \'Client\' ),
    
        array(
    
            \'read\' => true, // true allows this capability
            \'edit_posts\' => false, // Allows user to edit their own posts
            \'edit_pages\' => false, // Allows user to edit pages
            \'edit_others_posts\' => false, // Allows user to edit others posts not just their own
            \'create_posts\' => false, // Allows user to create new posts
            \'manage_categories\' => false, // Allows user to manage post categories
            \'publish_posts\' => false, // Allows the user to publish, otherwise posts stays in draft mode
            \'edit_themes\' => false, // false denies this capability. User can’t edit your theme
            \'install_plugins\' => false, // User cant add new plugins
            \'update_plugin\' => false, // User can’t update any plugins
            \'update_core\' => false // user cant perform core updates
    
        )
    
    );
    
    然后使用上面的代码重定向登录,如果并且仅当它是客户端角色。

    一个页面模板客户端页面放置此before get_header():

    $current_user = wp_get_current_user();
    $client = $current_user->user_login;
    $slug = get_post_field( \'post_name\', get_post() );
    $client = strtolower($client);
    if ($client != $slug) {
        header("Location: /index.php");
    }
    
    显然,我们需要让管理员看到页面;

    if (!current_user_can(\'administrator\')) {
        $current_user = wp_get_current_user();
        $client = $current_user->user_login;
        $slug = get_post_field( \'post_name\', get_post() );
        $client = strtolower($client);
        if ($client != $slug) {
            header("Location: /index.php");
        }
    }
    

    结束