カスタム投稿タイプ内の高度なカスタムフィールドを使用してデータベーステーブルを更新することに大きな問題があります。
データベースに「wp_company_profiles」という名前のテーブルに「address_1」と「address_2」というフィールドがあり、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');
クエリを2回実行し、最初のクエリの結果を2番目のクエリに渡します。これを試してみてください。また、データのサニタイズやnonceチェックを行っているようには見えないため、任意のクエリを実行する代わりにwpdbのupdate関数を使用することを検討することもできます。照会したい場合は、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');