替换所有变量后,UPDATE命令看起来是这样的-在本例中,表前缀是wp_ (默认值),$group[\'1C_id\'] 是9095b4cf-969d-11e9-a601-5cf3706390c8, 和$found_id (术语ID)为123.
UPDATE `wp_termmeta`
SET `meta_key` = \'1C_id\', `meta_value` = \'9095b4cf-969d-11e9-a601-5cf3706390c8\'
WHERE `term_id` = 123
这意味着,
all 现有元数据,其中术语ID为
123和
无论元键是什么,都将更改:首先,元键设置为1C_id, 所以tax_position meta已重命名为1C_id.
其次,元值设置为9095b4cf-969d-11e9-a601-5cf3706390c8, 成为tax_position\'s新值。
这就解释了这一点:“这将删除tax\\u position meta并复制1C\\u id meta行;。
一、 e.Thetax_position meta没有被删除,只是它的键和值被更改了,并且它们被设置为与现有的相同1C_id 元。
因此$wpdb->update() 没有实际删除或添加任何元数据。是您的查询没有正确执行。
那么也许你想做这样的事?
注意,我使用$wpdb->prepare() 为安全执行准备查询,您也应该这样做
// Select meta IDs by meta value.
$meta_ids = $wpdb->get_col( $wpdb->prepare( "
SELECT meta_id FROM $wpdb->termmeta
WHERE meta_value = %s
", $group[\'1C_id\'] ) );
// Then update all the above meta by the meta ID.
if ( ! empty( $meta_ids ) ) {
$wpdb->query( $wpdb->prepare( "
UPDATE $wpdb->termmeta
SET meta_key = \'1C_id\', meta_value = %s
WHERE meta_id IN (" . implode( \',\', $meta_ids ) . ")
", $group[\'1C_id\'] ) );
/* Or you can use update_metadata_by_mid():
foreach ( $meta_ids as $meta_id ) {
update_metadata_by_mid( \'term\', $meta_id, $group[\'1C_id\'], \'1C_id\' );
}
*/
}
但是,为什么要用相同的值更新元值($group[\'1C_id\']) 选择元时使用?那是打字错误吗?(可能您只是想更新元密钥……?)