如何在主题更新时更改数据库值

时间:2012-05-10 作者:Frankie Jarrett

我有一个发布到野外的主题,但没有适当地为帖子类型加前缀。是的,我知道,这很遗憾,我很后悔:(

因此,我目前正在使用acme 作为帖子类型名称,但我想将其更改为prefix_acme.

我正在寻找最合适的函数/钩子来重命名帖子类型,而不会丢失任何数据,这样用户就不会有什么不同。

数据库值是否可以在wp_posts -> post_type 只是在主题更新期间更改?

如果是这样的话,那么对于wp_postmeta -> meta_key 而不会失去meta_value?

1 个回复
最合适的回答,由SO网友:Tommixoft 整理而成

这不是完整的答案,但我认为如果您能够制作模板,它将对您有很大帮助-您将能够做到这一点:

在theme init(安装时)中,make函数将进行db查询,以查找具有您的post\\u类型的所有post,并将post\\u类型重命名为您的新值。(我认为这非常简单,只需一个查询即可完成)。

然后确保您的新主题支持新的post\\u类型(只需更改post\\u类型名称)-就是这样!客户端不会丢失任何东西,您会在几秒钟内修复它:)

也许这个查询可以做到:(未测试)

function fixme($oldname, $new_typename){
global $wpdb;
$wpdb->query( $wpdb->prepare( "UPDATE ".$wpdb->posts." SET post_type = %s WHERE post_type = %s", $new_typename, $oldname ) );                                                                                                                                                        

}
您可以在此函数中使用:$wpdb->prefix 如果需要获取前缀。

或者您可以使用add_action( \'after_setup_theme\', \'your_function_name\' ); 因此,在安装主题后,它将调用您定义的函数,但您必须将其更改为不使用参数来设置新的post\\u类型,而是手动写入它们(分配给$oldname,$new\\u typename值)

是的,您也可以对元键执行相同的操作(如果它们没有被清理,如果它们被清理了,那么您将比在常规情况下更需要php)。。您可以对查询执行任何操作,因为它们直接指向数据库。

结束

相关推荐

Database structure cheatsheet

我正在尝试为我开发的站点创建自定义搜索页面,但我缺少创建自定义sql查询所需的信息。你们知道有什么有用的资源吗?