Answers:
抱歉,我在wordpress论坛上偶然发现了答案。
事实证明Role Scoper确实做得很好。该论坛帖子的作者说得最好:
要使用户能够编辑一个特定页面,但不能编辑其他页面,请执行以下操作:
- 给他们一个订阅者的WordPress角色
- 管理>页面>编辑其页面
- 展开“高级选项”下的“编辑器”选项卡
- 选中用户名左侧的不带括号的复选框(如果将创建子页面,请同时选中带括号的复选框{[]},该复选框为所有当前或将来的子页面分配角色)
- 保存页面
我面临着与您相同的情况,我所做的是创建一个名为“首页”的自定义帖子类型,还创建了“ Bainternet帖子创建限制”插件以限制每个用户创建每种帖子类型。试试看http://wordpress.org/extend/plugins/bainternet-posts-creation-limits/
解决方案表示您已禁用“普通”帖子类型(帖子,页面)的编辑。
这并不像您想象的那么难。的关键是用户的登录名。分类法甚至术语也可以这样做。
请参阅以下内容(也有查询示例):
// 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_user_can)的位置也可以在其他位置。取决于您的特定需求。只是为了确保这一点:这些示例可以指导您解决问题。希望有帮助 :)
由于这是一个小组网站,因此我对“成员”,自定义帖子类型以及将作者权限手动分配给特定成员做了类似的操作,但是我确实记得在一些伙伴新闻支持线程中读到,参与注册过程,因此我想可以为注册时的每个用户自动创建一个页面/自定义帖子类型,并将该特定页面分配给新创建的成员作为主页。我还添加了Scribu的前端编辑器,并将后端阻止给非管理员成员。您可能还可以在注册时添加重定向,以便将新成员重定向到其页面(我想可能会有一些默认内容)。
我看看是否可以找到该buddypress支持线程。
附录-编辑帖子字段的作者选择器中存在错误。它当前不使用标准权限系统,这可能会使成员解决方案更加困难(尽管如果按页面创建分配作者可能会起作用)。Trac中有一个补丁,但我认为它尚未应用于核心。