我正在尝试更新WP中的postmeta
表。我使用以下查询来设置新行。但是,如果该行已存在,我只想更新meta_value
。目前,每次运行时,它都会为每个product[0]
添加一个新行,即使它已经存在。
$sql = "INSERT INTO wp_postmeta (post_id, meta_key, meta_value) VALUES ($productID[0], 'custom_field', 'worked') ON DUPLICATE KEY UPDATE meta_value = 'changed'";
$wpdb->query(
$wpdb->prepare( $sql )
);
当我转储最后一个查询时,它给了我下面的内容,我似乎无法看清楚是什么问题。
"INSERT INTO wp_postmeta (post_id, meta_key, meta_value) VALUES (1836, 'custom_field', 'worked') ON DUPLICATE KEY UPDATE meta_value = 'changed'"
答案 0 :(得分:0)
如果您尚未在表上定义唯一索引或主索引,则会发生这种情况。据推测,每个post_id
/ meta_key
组合只需要一行。
尝试添加此内容:
create unique index idx_wp_postmeta_2 on wp_postmeta(post_id, meta_key)
然后您的查询应该更新值而不是插入新行。
答案 1 :(得分:0)
您是否有使用自定义查询更新postmeta表的具体原因?
虽然你可以使用WordPress的内置功能实现同样的目的。
update_post_meta 是内置函数,如果存在于表中则会更新行,否则会添加新条目。
您可以通过 get_post_meta() 功能进行检查。
e.g。
if(get_post_meta($productID[0], 'custom_field', true) == 'worked') {
update_post_meta($productID[0], 'custom_field', 'changed');
}