如何防止帖子被删除?


8

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

所以我有一个像

add_action('before_delete_post', function($id) {
        wp_die(0);
    });

但是似乎不是所有的删除操作都是ajax,因此它将显示黑屏,并返回错误页面,结果为“ 0”

明智的做法是,上面的代码还可以,但是还有更好的方法吗?

Answers:


9

不要让动作死掉,只需进行重定向(到您想要的任何地方):

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);

我知道,这很老了,但是这如何与AJAX调用和XML-RPC请求一起使用?我认为在这种情况下,重定向不是正确的解决方案。
Andrea Sciamanna 2014年

5

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

首先,从视线中删除“删除”选项。以下内容隐藏了“ 批量操作”和“ 清空垃圾箱”按钮,并删除了“ 永久删除”行操作。

之前

使用此代码:

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; 
}

结果如下:

后

利息单

没有钩子cpt_row_actions。钩page_row_actionspost_row_actions如果柱类型是分层的或不施加,分别。


麦凯 为您和@tf +1。我以前无法赞扬他的一线话,因为有待我提供进一步的信息,我只能通过对该主题进行进一步的研究来评估其质量。另一个答案彻底地结合了上下文。
Johannes Pille 2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.