How to disable page delete

时间:2011-09-24 作者:Mifas

我的客户不是电脑人。我为他创建了一个网站。这里有一些重要的页面。我的客户总是删除此页面。然后我想重新配置代码(页面id)。

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

附言:他可能会编辑这些页面。不删除。

6 个回复
SO网友:Roman

您可以删除这些功能delete_pages, delete_others_pagesdelete_published_pages 来自分配给用户的角色。这将阻止完整用户角色删除页面。

要将此行为仅限于一个用户,必须创建一个专用的新角色并将其分配给该用户。看看Members JustinTadlock插件,了解更多信息。

示例:从管理员角色中删除页面的功能

$role = get_role(\'administrator\');
$role->remove_cap(\'delete_pages\');
$role->remove_cap(\'delete_others_pages\');
$role->remove_cap(\'delete_published_pages\');
更多资源Codex: Roles & Capabilities
  • Codex: get_role()
  • SO网友:Playforward

    布莱恩·费特的答案几乎是完美的。

    在我的测试中,只有将操作更改为“wp\\u trash\\u post”和“before\\u delete\\u post”时,他的答案才有效

    function restrict_post_deletion($post_ID){
        $user = get_current_user_id();
        $restricted_users = array(21,25,54,2,19);
        $restricted_pages = array(2,21,52,64);
        if(in_array($user, $restricted_users) && in_array($post_ID, $restricted_pages)){
            echo "You are not authorized to delete this page.";
            exit;
        }
    }
    add_action(\'wp_trash_post\', \'restrict_post_deletion\', 10, 1);
    add_action(\'before_delete_post\', \'restrict_post_deletion\', 10, 1);
    

    SO网友:Brian Fegter

    您可以创建一个操作来限制用户丢弃或删除帖子,如下所示。这不是最漂亮的,但很管用。您必须手动填充用户和页面ID。

    function restrict_post_deletion($post_ID){
        $user = get_current_user_id();
        $restricted_users = array(21,25,54,2,19);
        $restricted_pages = array(2,21,52,64);
        if(in_array($user, $restricted_users) && in_array($post_ID, $restricted_pages)){
            echo "You are not authorized to delete this page.";
            exit;
        }
    }
    add_action(\'trash_post\', \'restrict_post_deletion\', 10, 1);
    add_action(\'delete_post\', \'restrict_post_deletion\', 10, 1);
    

    SO网友:Shahar Dekel

    以下是我测试并发现的一个示例,说明如何防止通过其ID删除特定帖子或页面。它应该适用于所有wordpress用户:

    add_action(\'wp_trash_post\', \'prevent_post_deletion\');
    function prevent_post_deletion($postid){
        $protected_post_id = 67586;
        if ($postid == $protected_post_id) {
            exit(\'The page you were trying to delete is protected.\');
        }
    }
    

    SO网友:DropHit

    您可以很容易地从快速编辑和元框中隐藏垃圾箱链接。一个使用样式,另一个使用post\\u row\\u actions过滤器(您可以同时使用过滤器-dunno)https://developer.wordpress.org/reference/hooks/post_row_actions/

    //hide meta with styles
    function hide_publishing_actions()
    {
        global $post;
        if ($post_id == 21)
        {
            if (!current_user_can(\'administrator\'))
            {
                // stuff here for non-admins
                echo \'<style type="text/css">#delete-action</style>\';
            }
        }
    }
    
    add_action(\'admin_head-post.php\', \'hide_publishing_actions\');
    add_action(\'admin_head-post-new.php\', \'hide_publishing_actions\');
    
    //for quick edit
    add_filter(\'post_row_actions\', \'remove_row_actions\', 10, 1);
    function remove_row_actions($actions)
    {
        if (!current_user_can(\'administrator\'))
        {
            if ($post_id == 21)
            unset($actions[\'edit\']);
            unset($actions[\'view\']);
            unset($actions[\'trash\']);
            unset($actions[\'inline hide-if-no-js\']);
        }
        return $actions;
    }
    

    SO网友:Alexander Behling

    您还可以使用filter page\\u row\\u操作(请参阅https://developer.wordpress.org/reference/hooks/page_row_actions/) 对页面列表表中的每个页面调用。

    您必须检查不希望编辑或删除的帖子的id。您可以修改这些页面的操作数组。如果返回空数组,页面仍将列在页面列表表中,但没有用于编辑、删除等的链接,。。。因此,无法编辑或删除该页面。

    您的函数应该是这样的(注意:在我的示例代码中,只有站点管理员有权修改特殊页面):

    function custom_filter_page_row_actions($actions,$post){
      $page_to_exclude = get_page_by_path(Slug of the page you want to exclude);
      $site_admin_email = get_option(\'admin_email\'); // Get the email of the site admin
      $site_admin =  get_user_by(\'email\',$site_admin_email); // Get WP_User-instance of the site admin
      if(($post == $page_to_exclude) && ($site_admin != wp_get_current_user())){
        $actions = array(); //remove all actions
      }
      return $actions;
    }
    add_filter(\'page_row_actions\',\'custom_filter_page_row_actions\',999999,2); //Use a high number for this filter so that it is called after all plugins e.g. WPBakery Pagebuilder has add there actions
    

    结束

    相关推荐

    Pages with 2 Columns

    我看过许多可用的插件,但它们似乎都太难使用,或者没有提供足够的灵活性。Plugins I\'ve already tried:<我还研究了一种允许每页边栏的工具,该工具可以工作,但该栏的内容是独立的,因此很难管理,而缺少WYSIWYG编辑器则使那些不熟悉HTML的人很难管理。What I\'m Trying Achieve:我正在从事的项目要求负责输入内容的人员能够将内容添加到主内容的四分之三栏和与主内容相关的信息内容的四分之一栏中。1/4列的内容将根据页面的不同而变化。对于大多数开发人员来说,在帖