作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在运行一个 WordPress 5.2.3 站点并且在管理面板中遇到问题。
我有一个自定义角色,我们称之为 librarian
,以及自定义的帖子类型,我们称之为 book
.
我想让 librarian
可以编辑 book
但不创建一个新的。
遵循另一个问题 ( WordPress: Disable “Add New” on Custom Post Type ) 和 WordPress 中的建议documentation ,我最终得到了这段代码:
// Custom post type.
register_post_type('book',
array(
'labels' => array(
'name' => __( 'book' ),
'singular_name' => __( 'Book' )
),
'capability_type' => array('book', 'books'),
'capabilities' => array(
'create_posts' => 'do_not_allow' // <-- The important bit.
),
'map_meta_cap' => true,
'description' => 'Book full of pages',
'exclude_from_search' => true,
'publicly_queryable' => false,
'show_in_nav_menus' => false,
'show_ui' => true,
'show_in_menu' => true,
'show_in_rest' => true,
'menu_icon' => 'dashicons-location',
'menu_position' => 5,
'supports' => array('title', 'revisions')
));
// Custom role.
add_role('librarian', 'Librarian', array(
'read' => true,
'edit_books' => true,
'edit_published_books' => true
));
edit.php?post_type=book
时,我期待着作为
librariran
然后我会看到
books
的列表进行编辑,但我看不到
新增 按钮。但是,我实际得到的是
403
回复:
Sorry, you are not allowed to access this page.
edit.php?post_type=book
作为 administrator
,然后我看到没有 的列表页面新增 按钮,根据需要。 librarian
角色edit_posts
能力,然后我看到没有 的列表页面新增 按钮,根据需要(但我不想给他们 edit_posts
功能!)。 'create_posts' => 'do_not_allow'
来自 book
类型注册,librarian
可以看到列表页,但它包含新增 按钮。 最佳答案
看来这是 WordPress 中的一个错误。我找到了问题的根源和解决方法。
解决方法
如果您对原因不感兴趣,解决方法是注释掉 wp-admin/includes/menu.php
中的这段修饰代码。 :
https://github.com/WordPress/WordPress/blob/master/wp-admin/includes/menu.php#L168
/*
* If there is only one submenu and it is has same destination as the parent,
* remove the submenu.
*/
if ( ! empty( $submenu[ $data[2] ] ) && 1 == count( $submenu[ $data[2] ] ) ) {
$subs = $submenu[ $data[2] ];
$first_sub = reset( $subs );
if ( $data[2] == $first_sub[2] ) {
unset( $submenu[ $data[2] ] );
}
}
edit.php?post_type=book
在
wp-admin/includes/menu.php
中未通过此检查:
if ( ! user_can_access_admin_page() ) {
/**
* Fires when access to an admin page is denied.
*
* @since 2.5.0
*/
do_action( 'admin_page_access_denied' );
wp_die( __( 'Sorry, you are not allowed to access this page.' ), 403 );
}
user_can_access_admin_page()
调用
get_admin_page_parent()
.
get_admin_page_parent()
返回一个空的父级,最终导致
user_can_access_admin_page()
错误返回
false
在
librarian
的情况下角色(
administrator
角色因不同原因而传递)。
get_admin_page_parent()
返回一个非空的父节点,并且访问检查从那里正确进行。
$submenu
既用于确定 UI,也用于对权限层次结构做出决策。除了上面的解决方法之外,我没有看到这个问题的立即快速解决方案,它不会在整个 WordPress 代码的其他地方产生副作用。
关于具有自定义角色的 WordPress 用户无法查看没有 "create_posts"功能的自定义帖子类型的列表页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58218457/
我正在运行一个 WordPress 5.2.3 站点并且在管理面板中遇到问题。 我有一个自定义角色,我们称之为 librarian ,以及自定义的帖子类型,我们称之为 book . 我想让 libra
我是一名优秀的程序员,十分优秀!