我为您制作了以下代码,以便复制并粘贴到functions.php
文件
我相信有一个更简单的解决方案,但这是我想出的有效解决方案。
本节第一部分adds the new roles.
function anakeme_custom_roles() {
add_role(
\'level_1\',
\'Level 1\',
[
\'read_private_pages\' => true,
\'read_level_1\' => true,
]
);
add_role(
\'level_2\',
\'Level 2\',
[
\'read_private_pages\' => true,
\'read_level_2\' => true,
]
);
}
add_action( \'init\', \'anakeme_custom_roles\' );
代码的第二部分创建foreach循环,并根据用户功能和页面级别添加条件。
function anakeme_shortcode_level() {
$pages = get_pages(
array(
\'post_status\' => array( \'private\' ),
)
);
foreach ( $pages as $page ) {
$page_level = get_post_meta( $page->ID, \'visibility_level\', true );
$read_1 = current_user_can( \'read_level_1\', $page->ID );
$read_2 = current_user_can( \'read_level_2\', $page->ID );
if ( $read_1 && $page_level == 1 ) {
echo $page->post_title . "<br/>";
} else if( $read_2 && $page_level >= 1 ) {
echo $page->post_title . "<br/>";
}
}
}
add_shortcode( \'list_pages_level\', \'anakeme_shortcode_level\' );
现在,要使其工作,您必须创建
custom field 在页面中,您希望对某些角色/级别保持独占。我在示例中创建的角色使用编号系统。
所以对于Level 1
用户要访问级别1页面,我只需添加自定义字段visibility_level
以及价值1
. 同样适用于Level 2
用户,只需交换值1
对于2
.
一旦建立了编号系统,我就使用一个条件来检查编号是否等于1
或更多,然后相应地显示结果。
To implement this anywhere in your site, use the shortcode list_pages_level
.
如果您希望在理解上述代码方面获得进一步帮助,或希望在代码上得到扩展,请回答您的问题
EDIT
上面的代码将在不使用第三方插件的情况下工作,但是OP需要一个代码与一个称为
\'MembersPress\', 下面的代码应该满足OP显示当前登录用户有权访问的页面的要求。
function anakeme_shortcode_level() {
global $current_user;
/**
*
* Get \'private\' pages as array.
*
*/
$pages = get_pages(
array(
\'post_status\' => \'private\',
)
);
/**
*
* Loop through all pages.
*
*/
foreach ( $pages as $page ) {
/**
*
* Get current users role.
*
*/
$user_roles = $current_user->roles;
$user_role = array_shift( $user_roles );
/**
*
* Check the current user can read private pages.
*
*/
$private = current_user_can( \'read_private_pages\', $page->ID );
/**
*
* Get the roles that have access to the associated page.
*
*/
$restricted = get_post_meta( $page->ID, \'_members_access_role\' );
/**
*
* Find and echo only pages where the user has access to private pages and the `users role` is equal to the `role` restriction on the page set by MembersPress.
*
*/
if( ( $private ) && ( $user_role == in_array( $user_role, $restricted ) ) ) {
echo $page->post_title . "<br/>";
}
}
}
add_shortcode( \'list_pages_level\', \'anakeme_shortcode_level\' );
请注意,上面提供的代码是
NOT 通常由StackOverflow成员提供,因为它与第三方插件(MembersPress)相关。请确保以后联系插件的客户支持以获取任何编码请求。
请务必mark the answer as correct 如果这是您所需要的upvote 答案是一种感谢:)