有没有办法(插件?)将用户限制为只能编辑一个页面?

时间:2010-09-13 作者:Tom Wright

我们像CMS一样使用wordpress,非常希望允许用户拥有“主页”。理想情况下,可以防止他们把整个场地搞得一团糟。

有没有一种简单的方法可以将用户的编辑权限限制在单个页面上?

我目前正在使用Members plugin 要做其他基于权限的事情,所以如果有一个解决方案可以巧妙地扩展它,或者完全取代它,那就太好了。

创建新用户时自动创建主页的奖励积分。

更新:我应该澄清,这些页面需要限制在网站的特定区域(即同一页面的所有子页面)。此外,在与一些用户交谈后,他们似乎会发现从主页创建分支子页很有用。

7 个回复
最合适的回答,由SO网友:Tom Wright 整理而成

很抱歉这么做,但我无意中找到了答案in the wordpress forums.

事实证明Role Scoper 这真的很好。该论坛帖子的作者说得最好:

要使用户能够编辑一个特定页面,但不能编辑任何其他页面,请执行以下操作:

给他们一个订阅者的WordPress角色,管理页面,编辑他们的页面,展开“高级选项”下的“编辑器”选项卡,选中用户名左侧的非大括号复选框(如果要创建子页面,也要选中大括号复选框{[]),为所有当前或未来的子页面分配角色)

  • 保存页面

  • SO网友:Norcross

    基本WordPress安装可能无法满足您的要求。您可以设置一个多站点实例,允许用户拥有自己的“子”站点,或者使用BuddyPress或Mingle等具有用户配置文件功能的站点。

    SO网友:Bainternet

    我面临着与您相同的情况,我所做的是创建一个名为“主页”的自定义帖子类型,并创建了“Bainternet帖子创建限制”插件,以限制每个用户创建每个帖子类型。试试看http://wordpress.org/extend/plugins/bainternet-posts-creation-limits/

    SO网友:BUGHUNTER

    用户访问管理器插件将为您实现这一点,所有其他方法都太复杂了。UAM很简单,设置组并将组分配到您的子页面,准备就绪。

    SO网友:Ben West

    我会用Capability Manager 或者查看codex中的角色和功能以实现这一点。

    SO网友:kaiser

    该解决方案意味着您已禁用对“普通”帖子类型(帖子,页面)的编辑。

    这并不像你想象的那么难。键是用户登录名。分类法甚至术语也可以做到这一点。

    请参见以下内容(还有一个查询示例):

    // 1st: Add a post type for that user with it\'s 
    //   user login & according capabilities 
    function create_user_home() {
        global $current_user;
        get_currentuserinfo();
    
        register_post_type(
            \'home_of_\'.$current_user->user_login,
            array(
                \'public\' => true,
                \'capability_type\' => $current_user->user_login,
                \'capabilities\' => array(
                    \'publish_posts\' => \'publish_\'.$current_user->user_login,
                    \'edit_posts\' => \'edit_\'.$current_user->user_login,
                    \'edit_others_posts\' => \'edit_\'.$current_user->user_login,
                    \'delete_posts\' => \'delete_\'.$current_user->user_login,
                    \'delete_others_posts\' => \'delete_others_\'.$current_user->user_login,
                    \'read_private_posts\' => \'read_private_\'.$current_user->user_login,
                    \'edit_post\' => \'edit_\'.$current_user->user_login,
                    \'delete_post\' => \'delete_\'.$current_user->user_login,
                    \'read_post\' => \'read_\'.$current_user->user_login,
                ),
            )
        );
    }
    add_action( \'init\', \'create_user_home\' );
    
    // A query could be done like this:
    wp_reset_query(); // to be sure
    
    global $wp_query, $current_user;
    get_currentuserinfo();
    
    $query_user_home = new WP_Query( array(
        ,\'order\'        => \'ASC\'
        ,\'post_type\'    => \'home_of_\'.$current_user->user_login
        ,\'post_status\'  => \'publish\'
    ) );
    
    if ( $query_user_home->have_posts() ) :
        while ( $query_user_home->have_posts() ) : $query_user_home->the_post();
            // check for password
            if ( post_password_required() ) :
                the_content();
            elseif ( !current_user_can(\'\') ) :
                // display some decent message here
                return;
            else :
    
                // here goes your content
    
            endif;
        endwhile;
    
    else : // else; no posts
        printf(__( \'Nothing from Mr./Mrs. %1$s so far.\', TEXTDOMAIN ), $current_user->user_firstname.\' \'.$current_user->user_lastname);
    endif; // endif; have_posts();
    
    wp_rewind_posts(); // for a sec. query
    
    对于分类法,这甚至更有意义,因为您只能查询带有此用户分类法中术语标记的帖子,但这需要一个带有用户分类法术语的帖子元框。条件相同:用户登录名,只需添加分类:

    function create_user_tax() {
        if ( current_user_can("$current_user->user_login") ) :
            global $current_user;
            get_currentuserinfo();
    
            $singular = $current_user->user_login;
            $plural = $singular.\'\\\'s\';
    
            // labels
            $labels = array (
                     \'name\'         => $plural
                    ,\'singular_name\'=> $singular
                );
    
            // args
            $args = array (
                 \'public\'               => true
                ,\'show_in_nav_menus\'    => true
                ,\'show_ui\'              => true
                ,\'query_var\'            => true
                ,\'labels\'               => $labels
                ,\'capabilities\' => array(
                    \'manage_\'.$current_user->user_login
                )
            );
    
            // Register
            register_taxonomy ( 
                 $current_user->user_login
                ,array ( \'post\', \'page\' )
                ,$args
            ); 
            // Add to post type
            // you can even add your current user post type here
            register_taxonomy_for_object_type (
                 $current_user->user_login
                 ,array ( \'post\', \'page\', \'home_of_\'.$current_user->user_login ) 
            );
        endif;
    }
    add_action( \'init\', \'create_user_tax\' );
    
    能力检查(current\\u user\\u can)的位置也可以在其他地方。取决于您的具体需求。为了确保这一点:以下是一些示例,可以指导您找到解决方案。希望对您有所帮助:

    SO网友:paul

    这可以通过插件s2member实现,免费版本就足够了。我创建了一个客户端区域,每个客户端都有一个URL。这里有一个视频教程:http://www.primothemes.com/forums/viewtopic.php?f=4&t=586&start=0&hilit=client+area

    结束

    相关推荐

    How do you debug plugins?

    我对插件创作还很陌生,调试也很困难。我用了很多echo,它又脏又丑。我确信有更好的方法可以做到这一点,也许是一个带有调试器的IDE,我可以在其中运行整个站点,包括插件?