gpt4 book ai didi

php - WordPress。使用remove_cap(),即使删除此功能后仍获得 "Sorry, you are not allowed to access this page."

转载 作者:行者123 更新时间:2023-12-03 16:47:57 32 4
gpt4 key购买 nike

在 WordPress v5.5.1 中,我使用了以下功能来限制作者发布帖子:

function set_capabilities() {
$author = get_role('author');
$caps = array(
'edit_others_posts',
'edit_others_pages',
'publish_posts',
'delete_posts',
'delete_published_posts',
);

foreach ($caps as $cap) {
$author->remove_cap($cap);
}
}
add_action('init', 'set_capabilities');
这导致完全删除帖子页面并在 wp-admin/post-new.php 添加新帖子.
我已经删除了 set_capabilities()功能,仍然收到错误“抱歉,您无权访问此页面。”。
我已经尝试重置 wp-capabilities ,仍然对我不起作用。
我试过用 author 添加一个新用户角色,新用户也有同样的问题。
我如何让作者创建访问 wp-admin/post-new.php 的帖子再次?

最佳答案

问题
调用后$author->remove_cap($cap)该功能已从作者角色中删除,不仅在内存中,而且在数据库中(有关实现和链接,请参见下面的引用部分)。结果,删除了对 set_capabilities() 的调用。或向角色添加新用户不会重置角色功能。
解决方案
方法 1 - 使用 Wordpress
你可以做与set_capabilities()相反的事情例如 add_capabilities()如下所示使用官方 Wordpress API 在内存和数据库中重新分配这些权限

function add_capabilities() {
$author = get_role('author');
$caps = array(
'edit_others_posts',
'edit_others_pages',
'publish_posts',
'delete_posts',
'delete_published_posts',
);

foreach ($caps as $cap) {
$author->add_cap($cap);
}
}
add_action('init', 'add_capabilities');
来自您的 users然后,您可以确保为用户分配了所需的作者角色。
方法 2 - 手动访问和更新您的数据库
假设 wp_作为您的数据库前缀,您可以确保用户确实被分配了角色 author如果不是手动分配这个。这是在您的 wp_usermeta表,您应该会看到带有 user_id 的记录有问题和名字 wp_capabilities .该值存储一个 php 序列化的角色数组,例如,如果用户只是一个作者,则该值将是 a:1:{s:6:"author";b:1;} .
现在您已经确保用户确实在角色中,所有角色能力都存储在 wp_options 中。 option_name 中的表 wp_user_roles .同样,这是一个长序列化的 php 关联数组,其结构如此(假设 $roleName 是任何角色,例如“作者”)
["$roleName"=>[
'name'=>"$roleName",
'capabilities'=>[
'edit_others_posts',
'edit_others_pages',
'publish_posts',
'delete_posts',
'delete_published_posts',
]
]
]
如果您有备份或其他工作位置,则可以恢复它。如果您希望手动修改这些值,由于需要 php 序列化,我建议您在 php 中编写自定义代码来实现,例如如果使用 Solution 1没有帮助或 Wordpress 方法不可用,例如。从不同的客户端/服务器/位置工作。
其他资源和引用资料
从官方 Wordpress 文档中查看实现
$作者 = get_role ('作者'); --> 返回 WP_Role$author以及 remove_cap 的实现被称为和 add_cap我会引用从 https://developer.wordpress.org/reference/classes/wp_roles/ 中检索到的包括在下面:
/**
* Add capability to role.
*
* @since 2.0.0
*
* @param string $role Role name.
* @param string $cap Capability name.
* @param bool $grant Optional. Whether role is capable of performing capability.
* Default true.
*/
public function add_cap( $role, $cap, $grant = true ) {
if ( ! isset( $this->roles[ $role ] ) ) {
return;
}

$this->roles[ $role ]['capabilities'][ $cap ] = $grant;
if ( $this->use_db ) {
update_option( $this->role_key, $this->roles );
}
}

/**
* Remove capability from role.
*
* @since 2.0.0
*
* @param string $role Role name.
* @param string $cap Capability name.
*/
public function remove_cap( $role, $cap ) {
if ( ! isset( $this->roles[ $role ] ) ) {
return;
}

unset( $this->roles[ $role ]['capabilities'][ $cap ] );
if ( $this->use_db ) {
update_option( $this->role_key, $this->roles );
}
}

关于php - WordPress。使用remove_cap(),即使删除此功能后仍获得 "Sorry, you are not allowed to access this page.",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63976345/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com