如何防止帖子被删除?

时间:2013-03-24 作者:Yoga

对于审核问题,我只希望一篇帖子可以被丢弃,但不能删除-对于所有用户。

所以我有一个插件

add_action(\'before_delete_post\', function($id) {
        wp_die(0);
    });
但似乎并非所有的删除操作都是ajax,因此它将显示一个黑屏,并返回一个结果为“0”的错误页面

就功能而言,上面的代码是可以的,但是有没有更好的方法?

3 个回复
SO网友:tfrommen

不要让动作消失,只需重定向(到你想去的任何地方):

function wpse_92155_before_delete_post() {
    wp_redirect(admin_url(\'edit.php\'));
    exit();
} // function wpse_92155_before_delete_post
add_action(\'before_delete_post\', \'wpse_92155_before_delete_post\', 1);

SO网友:brasofilo

我会用钩子before_delete_post 作为防止删除的最后一层保护(使用@tf的解决方案,这是正确的答案)。

并首先删除;删除;可视选项。下面隐藏了批量操作和清空垃圾桶按钮,并永久删除行操作。

before

使用此代码:

add_action( \'admin_head-edit.php\', \'hide_delete_css_wpse_92155\' );
add_filter( \'post_row_actions\', \'hide_row_action_wpse_92155\', 10, 2 );
add_filter( \'page_row_actions\', \'hide_row_action_wpse_92155\', 10, 2 );

function hide_delete_css_wpse_92155()
{
    if( isset( $_REQUEST[\'post_status\'] ) && \'trash\' == $_REQUEST[\'post_status\'] ) 
    {
        echo "<style>
            .alignleft.actions:first-child, #delete_all {
                display: none;
            }
            </style>";
    }
}

function hide_row_action_wpse_92155( $actions, $post ) 
{
    if( isset( $_REQUEST[\'post_status\'] ) && \'trash\' == $_REQUEST[\'post_status\'] ) 
        unset( $actions[\'delete\'] );
        
    return $actions; 
}
结果如下:

after

有趣的注意事项

没有挂钩cpt_row_actions. 挂钩page_row_actionspost_row_actionsapplied if the post type is hierarchical or not, 分别地

SO网友:Mark Barnes

这是一篇老帖子,但对于其他仍在寻找答案的人来说,我认为有一种更优雅的方式——过滤user_has_cap. 这允许您在您确定的任何情况下删除用户的帖子权限。筛选user_has_cap 在一个简单的函数中自动删除UI元素和操作,无论尝试如何删除,都能正常工作。看见this post 了解更多详细信息。

add_filter (\'user_has_cap\', \'wpcs_prevent_deletion\', 10, 3);
 
function wpcs_prevent_deletion ($allcaps, $caps, $args) {
    if (isset($args[0]) && isset($args[2]) && $args[0] == \'delete_post\') {
        $post = get_post ($args[2]);
        // Insert your logic here
        if ($prevent_deletion) {
            $allcaps[$caps[0]] = false;
        }
    }
    return $allcaps;
}

结束

相关推荐

使用WordPress作为CMS时设置两个独立的博客

我需要尽快设置,但似乎无法在搜索和搜索后找出如何执行此操作。我使用WordPress安装主要是作为CMS。我想在我的网站上有两个不共享帖子的博客区域。当转到mydomain时。com,它应该显示一个自定义页面(与博客无关)。我有这个工作很好,但我需要这样做/博客将显示我公司的帖子和/摄影/博客将显示只与摄影相关的帖子。我的.htaccess 除了WordPress说要输入的代码外,没有其他内容。每当我去我的域名。com/blog,它将我转发到一篇帖子,而不是像mydomain那样向我显示帖子/摘要列表。c