是否可以根据页面块限制对管理区域中特定页面的访问?

时间:2017-04-10 作者:RevelationTravis

我想限制管理员角色(和/或特定用户)只能访问管理区域中的特定页面。关于如何使用页面ID实现这一点,似乎不乏答案,但我似乎找不到任何关于如何使用页面slug实现这一点的示例。

扩展说明:我有一个页面列表(slug是:login、logout、lostpassword、register和resetpass),我跨多个网站使用这些页面来创建与主题其余部分匹配的相应页面。但这些页面从来没有直接编辑过,它们对编辑、贡献者等来说是不必要的,可能会让人困惑,当然我也不希望他们尝试编辑或删除任何内容。

由于不同站点的页面ID可能不同,所以如果有一个功能,我可以简单地复制和粘贴,而不必担心它,这将非常方便。感谢您抽出时间阅读此问题以及可能提供的任何答案!

1 个回复
最合适的回答,由SO网友:CK MacLeod 整理而成

因此,在评论讨论之后sufficient answer on another StackEx question 是这样的:

add_filter( \'parse_query\', \'exclude_pages_from_admin\' );
function exclude_pages_from_admin($query) {
    global $pagenow,$post_type;
    if (is_admin() && $pagenow==\'edit.php\' && $post_type ==\'page\') {
        $query->query_vars[\'post__not_in\'] = array(\'21\',\'22\',\'23\');
    }
}
唯一对我们非常重要的部分是post-id的数组。

问题是,给定安装上的一个post可以具有相同的slug,但通常具有不同的ID。

所以,若我们创建一个要排除后段塞的数组,会怎么样:

$excludeds = array( \'login\', \'logout\', \'lostpassword\', \'register\', \'resetpass\' );

foreach ( $excludeds as $excluded ) {

        $excluded_IDs[] = get_page_by_path( $excluded )->ID;

}
这应该在不同的安装中起作用,假设相同的文章/页面:

add_filter( \'parse_query\', \'exclude_pages_from_admin_by_slug\' );

function exclude_pages_from_admin_by_slug( $query ) { 

    global $pagenow, $post_type;

    //set the array of to be excluded slugs
    $excludeds = array( \'login\', \'logout\', \'lostpassword\', \'register\', \'resetpass\' );

    //get array of IDs from array of slugs
    foreach ( $excludeds as $excluded ) {

        $excluded_IDs[] = get_page_by_path( $excluded )->ID;

    }

    if ( is_admin() && $pagenow==\'edit.php\' && $post_type ==\'page\' ) {

        //exclude those IDs from query
        $query->query_vars[\'post__not_in\'] = $excluded_IDs;

    }

}
无法从测试中保证代码的完整性,显然这是为了回答一个不同的问题。由于我们没有可供选择的代码,这里唯一感兴趣的是一个模型,用于派生一个要排除的ID数组并使用它。

相关推荐

无法访问wp-admin内部服务器错误500

我突然无法访问company.co.za/wp-admin, 当它重定向到http://company.co.za/wp-login.php?redirect_to=http%3A%2F%company.co.za%2Fwp-admin%2F&reauth=1 错误为500我应该如何解决此问题?我知道我可以尝试禁用所有插件,但在不登录wp dashboard的情况下如何做到这一点?我还应该采取其他措施吗?非常感谢。