web-dev-qa-db-ja.com

高度なカスタムフィールドでデータベースを更新する

カスタム投稿タイプ内の高度なカスタムフィールドを使用してデータベーステーブルを更新することに大きな問題があります。

データベースに「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');
1
chrisgrace

クエリを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');
1
Andrew Bartel