在 WordPress 中禁止用户删除某些文章类型中的文章

文 / @WordPress主题

自我介绍

小本本是一名WordPress开发者,有多年的WordPress开发经验,擅长使用WordPress开发各种Web应用,并且熟悉WordPress的各种功能和特性,能够熟练使用WordPress进行主题开发和插件开发。

禁止客户删除WordPress自定义文章类型订单

我们用WordPress开发过一个订单系统,当用户在前台提交了一个订单后,订单信息保存在一个自定义文章类型中,客服可以在后台查看、处理订单。为了防止客服不小心删除这个订单信息,我们需要禁用掉这个订单的删除功能,客服只能查看、编辑、不能删除订单。我们是通过下面的代码可以实现这个需求。

add_filter('map_meta_cap',function($caps,$cap,$user_id,$args)
{
    //如果不是delete_post权限,什么都不做
    if('delete_post' !== $cap || empty($args[0])){
        return $caps;
    }
    //如果是指定的文章类型,修改权限为do_not_allow
    if(in_array(get_post_type($args[0]),['messages','transaction'],true)){
        $caps[] = 'do_not_allow';
    }
    return $caps;
},10,4);

移除后,文章类标的操作栏,就只剩下“编辑”这一个功能了,如下图:

20230411055646510

移除批量操作中的“移至回收站”链接

虽然我们移除了用户删除文章类型的权限,但是文章类型列表批量编辑功能的“移至回收站”功能还在(如下图),如果我们选择了几篇文章,选择“移至回收站”操作,点击应用,WordPress会报错,告诉我们,我们没有权限删除文章。

20230411055645527

我们可以通过下面的代码移除这个功能:

add_filter('bulk_actions-edit-message',function($actions)
{
    unset($actions['trash']);
    return $actions;
});

除了禁止用户删除文章,我们还可以禁止用户进行其他操作,根据需要对相应的权限进行限制就可以了,WordPress的权限列表请参考官方文档:WordPress角色和权限。如果需要其他角色的用户可以删除订单,可以在上面的代码中加上权限判断,有需要的朋友自行编辑,在这里就不再列出了。

添加UTHEME为好友
扫码添加UTHEME微信为好友
· 分享WordPress相关技术文章,主题上新与优惠动态早知道。
· 微信端最大WordPress社群,限时免费入群。