我有两个自定义字段,都有数值:
tnid\\u 01
tnid\\U 01旧
所有帖子都存在自定义字段“tnid\\u 01”。
自定义字段“tnid\\u 01old”仅适用于某些帖子。
我正在尝试将“tnid\\u 01”的值替换为“tnid\\u 01old”,但前提是“tnid\\u 01old”存在。
这就是我目前所知道的,但我得到了一个mysql错误:
Update wp_postmeta (post_id, meta_key, meta_value)(
SELECT post_id, \'tnid_01\', meta_value
FROM wp_postmeta
WHERE meta_key=\'tnid_01old\'
);
thx公司
最合适的回答,由SO网友:WebElaine 整理而成
我不确定单独使用MySQL是否可以做到这一点,因为您需要保存值并重用它们。这是一个PHP版本。
<?php
global $wpdb;
// select all the old postmeta
$oldData = $wpdb->get_results("SELECT * FROM wp_postmeta WHERE meta_key = \'tnid_01old\'");
// make sure we have results
if($oldData) {
// loop through each result
foreach($oldData as $meta) {
// save post ID and meta value
$meta_post_id = $meta->post_id;
$metavalue = $meta->meta_value;
// update \'tnid_01\' value
$wpdb->update(
// table name
\'wp_postmeta\',
// value to set
array(
\'meta_value\' => "$metavalue"
),
// condition to meet: match same post ID but new meta key
array(
\'post_id\' => $meta_post_id,
\'meta_key\' => \'tnid_01\'
)
)
}
}
?>
如果你在一个低流量的网站上,你可以暂时将其粘贴到一个主题模板文件中,并加载使用该模板的任何页面,然后确保删除该代码,这样它就不会再次访问数据库。或者更合适的方法是在wp admin中运行它。