Prevent Deletion of Blogs

时间:2016-07-29 作者:Tonny Jørgensen

我试图阻止在WordPress多站点安装中删除博客。已经有一个插件可以做到这一点,但它使用wp_die() 作为解决方案,在我的场景中不起作用。

在wp admin/network中选择删除多个博客时,我希望WordPress继续工作,不要在尝试删除循环中的第一个博客时死掉。

我曾尝试将其作为一个mu插件来解决:

if(!$argv[1]) {

    add_action( \'delete_blog\', \'prevent_blog_delete_wpse\', 1, 2 );

    function prevent_blog_delete_wpse($blog_id, $drop = FALSE)
    {

        global $wpdb;
        $wpdb->query("update wp_blogs set deleted = 1 where blog_id = \'".$blog_id."\'");
        return FALSE;
    }
}
因此,如果通过浏览器调用删除,并且not CLI,它只会将日志标记为已删除。遗憾的是,这不起作用。我还尝试将优先级从1更改为99,但仍然不起作用。

这个解决方案的原因是,我有一个单独的cronjob来执行实际的删除,但首先要对sql表和博客进行tarball。dir文件,以防需要恢复。

这当然可以通过黑客来修复wpmu_delete_blog() 核心代码函数,但我不希望这样做,因为它将在WordPress的下一次更新中中断。

1 个回复
SO网友:Mark Kaplun

如果没有要停止的显式选项,则无法停止任何内容。在这种情况下,操作是指在特定执行路径的上下文中执行一些附加代码,而不是更改它。如果没有办法向进程发出停止的信号,那么唯一的办法就是die().

如果您从更遥远的逻辑角度来考虑,那么博客删除API不会删除博客是没有任何意义的。如果您需要“删除队列”之类的内容,只需编写自己的函数,并将管理中的相关删除链接替换为指向您操作的链接。

相关推荐

两个函数具有不同的参数和Add_Actions,但代码相同

我觉得这很简单。我有两个包含相同代码的函数,但需要有不同的add\\u操作和参数。必须有一种方法可以做到这一点,所以当我想添加更多代码时,我不会在两者之间复制和粘贴,而且你不应该复制代码。我错过了什么?一个用于ACF并在更新帖子类型时激发,另一个用于Admin列,该列在内联编辑相同的帖子类型时激发相同的操作。如果有帮助的话,我会把它们放在插件文件中。 function acp_editing_saved_usage1( AC\\Column $column, $post_id, $value ) {