如果删除主题,是否删除设置?

时间:2013-11-26 作者:jay

仅当主题从主题目录中删除(未停用)时,才能执行操作吗?

例如,我想在删除主题后从数据库中删除主题设置。因此,我想在删除主题时运行此操作:

delete_option( \'mysettings\' );

5 个回复
SO网友:J.D.

正如其他答案似乎暗示的那样,没有内在的方法可以做到这一点。没有类似的主题卸载APIthat for plugins. 实际上有a long-standing ticket 将此功能添加到WordPress core中,以便主题可以自行卸载。这个consensus 从…起the lead developers 似乎这并不是主题想要的特性。我不知道这样做的理由是什么。也许你可以帮他们解释一下它的好处。

SO网友:Ravinder Kumar

要知道哪个选项是由主题设置生成的是非常复杂的。

但如果您遵循名称约定,例如Woocommerce(Woocomerce创建的所有选项的名称如下woocommerce_* 和woocommerce作为插件目录名)。它可以轻松地搜索和删除主题选项。

因此,对于主题选项,您可以查看以下内容:

如果当前主题名为Deepfocus,则其选项名称应类似于Deepfocus_*

如果当前主题为2122,则其选项名称应类似于2122_*

Note:我创建了一个简单的插件(WP-Delete-Theme-Option ) 它遵循这些约定删除特定于主题的选项。

插件根据主题的目录名生成选项名。

SO网友:Krzysiek Dróżdż

我在这部分代码中找到的唯一操作/过滤器挂钩位于

do_action( \'delete_site_transient_\' . $transient, $transient );

这叫“内部”delete_site_transient(\'update_themes\'); 它被调用function delete_theme($stylesheet, $redirect = \'\') 成功删除主题后。

所以我会这样做,将我的操作添加到delete_site_transient_update_themes.在此操作中,您可以检查一些条件(主题名称),然后删除一些选项。

当然,当主题处于非活动状态且其目录从服务器中删除后,会调用此代码。所以你不能将这个动作添加到这个主题中(这会很好),你必须将它放在某个插件中。(我不认为安装额外插件只是为了确保在删除主题后删除主题选项是个好主意)。

SO网友:Margaret

我不确定我是否理解这个问题,所以我将首先重新措辞,但如果我理解了,我已经为此做了一个变通方法。

将问题理解为:

如果主题被停用,则会保留站点选项,因此如果再次激活,则无需重新输入这些选项,但删除后会完全删除这些选项。

这不是一个完整的答案,因为它谈到的是插件停用与卸载挂钩,而不是主题,但假设主题有类似的东西,我所做的是:

停用时,我将选项设置推到一个小备份表中激活时,检查备份表是否存在,如果存在,则从备份中恢复选项设置并删除该表(或仅检查该行并删除该行)。请确保您为表格命名,以便它与主题明确关联,就像上面关于woocommerce的注释一样。并始终在使用后删除这些设置,以确保最新的设置可用删除时,行为正常(永久清除选项设置)这样,如果用户必须停用以检查插件和主题冲突(就像我最近不得不使用Woo主题一样),则无需重新进行选项设置。

SO网友:Oxnard Developer

这完全取决于主题作者我认为。。。有些垃圾收集比其他垃圾收集好。我刚刚完成了我的wp\\U选项表,试图找出原因。。。在这样做的过程中,我发现了大量主题选项,这些主题早就被删除并从服务器上消失了。幸运的是,对于那些我想摆脱并清理我的表格的选项最多的文件,作者在所有“他的”文件上都加了一个很好的前缀,这样就可以很容易地识别它们。走进你的桌子,看看这是否适合你。如果是,则可以编写适当的查询。

此外,瞬变和site\\u瞬变应在经过一定时间后自行消除。。。情况也并非总是如此。我也手动删除了一页又一页。

我不知道这是否回答了这个问题。看起来您想生成一个php函数。。。我会做一个mySql查询,然后这样做。(当然,首先是db备份!)

结束

相关推荐