在自定义帖子类型中使用高级自定义字段更新数据库表时,我遇到了一个真正的问题。
我在数据库中有一个名为“wp\\u company\\u profiles”的表,其中包含“address\\u 1”和“address\\u 2”字段,并使用相同的值设置了两个高级自定义字段。我正在尝试创建一个钩子,当某个特定帖子更新时,该钩子将更新表字段。
下面是我正在使用的代码,但我不明白为什么它不起作用。
function update_company_profile($post_ID) {
global $wpdb;
if ($parent_id = wp_is_post_revision( $post_id )) $post_ID = $parent_id;
$address_1 = get_post_meta($post_ID, \'address_1\', true);
$address_2 = get_post_meta($post_ID, \'address_2\', true);
$sql = $wpdb->query("UPDATE wp_company_profiles SET
address_1 = \'{$address_1}\',
address_2 = \'{$address_2}\',
WHERE pid = {$post_ID}");
$wpdb->query($sql);
}
add_action(\'save_post\', \'update_company_profile\');
最合适的回答,由SO网友:Andrew Bartel 整理而成
您将运行两次查询,并将第一个查询的结果传递给第二个查询。试试这个。您还可以考虑使用wpdb中的update函数,而不是运行任意查询,因为它看起来不像是在执行任何数据清理或nonce检查。如果确实要查询,应使用prepare。
function update_company_profile($post_ID) {
global $wpdb;
if ($parent_id = wp_is_post_revision( $post_id )) $post_ID = $parent_id;
$address_1 = get_post_meta($post_ID, \'address_1\', true);
$address_2 = get_post_meta($post_ID, \'address_2\', true);
$sql = $wpdb->prepare("UPDATE wp_company_profiles SET
address_1 = \'%s\',
address_2 = \'%s\',
WHERE pid = %d", $address_1, $address_2, $post_ID);
$wpdb->query($sql);
}
add_action(\'save_post\', \'update_company_profile\');