如何禁用特定页面的删除选项?

时间:2018-08-28 作者:Adarsh

我发现很多这样的问题,但都不符合我的要求。在这里,我需要锁定一个名为settings的特定页面,而不是被其他管理员删除。但它应该能够编辑。是否有任何方法可以锁定特定页面。

2 个回复
最合适的回答,由SO网友:Jacob Peattie 整理而成

防止垃圾站操作是一种粗糙的方法。您必须关闭应用程序并显示一条丑陋的错误消息,用于删除帖子的UI仍将存在。

相反,我建议使用map_meta_cap 滤器这将允许您更改用户的capabilities 对于单个帖子。

通常,当WordPress检查用户是否可以删除帖子时,它会检查“用户可以delete_post 这篇文章?“。它解决这个问题的方法是map_meta_cap 作用

此功能决定哪些功能delete_post 映射到。例如,如果用户创建了帖子,那么函数映射delete_postdelete_posts. 因此,如果用户具有delete_posts 然后他们可以删除帖子。如果用户没有创建帖子,则函数映射delete_postdelete_others_posts.

这个map_meta_cap 过滤器允许我们更改此映射。所以我们要用它来绘制地图delete_postdo_not_allow 对于这个特定的职位。那么任何用户都无法删除该帖子。

这是执行此操作的功能:

function wpse_312694_restrict_page_deletion( $caps, $cap, $user_id, $args ) {
    $post_id = $args[0];

    if ( $cap === \'delete_post\' && $post_id === 117 ) {
        $caps[] = \'do_not_allow\';
    }

    return $caps;
}
add_filter( \'map_meta_cap\', \'wpse_312694_restrict_page_deletion\', 10, 4 );

SO网友:Adarsh

found the solution

function restrict_page_deletion($post_ID)
{
  $restricted_pageId = 177;

  if(($post_ID == $restricted_pageId))
   {
    echo "You are not authorized to delete this page.";
    exit;
   }
}
add_action(\'wp_trash_post\', \'restrict_page_deletion\', 10, 1);
结束