要实现这样的任务,首先要做的是能够识别用户可以编辑的页面。
有不同的方法可以做到这一点。它可能是一个用户元,一些配置值。。。为了得到这个答案,我将假设存在一个函数lile this:
function wpse_user_can_edit( $user_id, $page_id ) {
$page = get_post( $page_id );
// let\'s find the topmost page in the hierarchy
while( $page && (int) $page->parent ) {
$page = get_post( $page->parent );
}
if ( ! $page ) {
return false;
}
// now $page is the top page in the hierarchy
// how to know if an user can edit it, it\'s up to you...
}
现在我们有了一种确定用户是否可以编辑页面的方法,我们只需要告诉WordPress使用此功能来检查用户编辑页面的能力。
可以通过\'map_meta_cap\'
滤器
类似于:
add_filter( \'map_meta_cap\', function ( $caps, $cap, $user_id, $args ) {
$to_filter = [ \'edit_post\', \'delete_post\', \'edit_page\', \'delete_page\' ];
// If the capability being filtered isn\'t of our interest, just return current value
if ( ! in_array( $cap, $to_filter, true ) ) {
return $caps;
}
// First item in $args array should be page ID
if ( ! $args || empty( $args[0] ) || ! wpse_user_can_edit( $user_id, $args[0] ) ) {
// User is not allowed, let\'s tell that to WP
return [ \'do_not_allow\' ];
}
// Otherwise just return current value
return $caps;
}, 10, 4 );
此时,我们只需要一种将用户连接到一个或多个页面的方法。
根据用例的不同,可能会有不同的解决方案。
一个灵活的解决方案可以是添加下拉的“根”页面(请参见wp_dropdown_pages
) 转到编辑用户管理屏幕,并将所选页面另存为用户元。
我们可以利用\'edit_user_profile\'
要添加页面下拉字段,请执行以下操作\'edit_user_profile_update\'
将所选值存储为用户元。
我相信,在这个网站上有足够的指导如何做到这一点的细节。
当页面存储为用户元时wpse_user_can_edit()
通过检查页面id是否是用户元值的一部分,可以完成上面的函数。
删除编辑页面的功能,WordPress将完成其余操作:将从后端和前端删除任何编辑链接,将阻止直接访问。。。等等