Title: update_post_metaでシリアライズされたデータを更新したい
Last modified: 2023年6月29日

---

# update_post_metaでシリアライズされたデータを更新したい

 *  解決済 [JunichiK](https://ja.wordpress.org/support/users/junichik/)
 * (@junichik)
 * [3年、 3ヶ月前](https://ja.wordpress.org/support/topic/update_post_meta%e3%81%a7%e3%82%b7%e3%83%aa%e3%82%a2%e3%83%a9%e3%82%a4%e3%82%ba%e3%81%95%e3%82%8c%e3%81%9f%e3%83%87%e3%83%bc%e3%82%bf%e3%82%92%e6%9b%b4%e6%96%b0%e3%81%97%e3%81%9f%e3%81%84/)
 * いつもお世話になっております。
 * 先日、「Contact Form 7」と「flamingo」でデータベースに保存している送信データを
   update_post_meta で上書きする際に、checkboxがうまくいかないという件で質問させ
   ていただき、一旦解決済みとしたのですが、やはり、うまくいかずに困っております。
   
   業務用の社内のページなので、リンクを記載することは難しいのですが、例えば、「発注
   済み」というチェックボックスがあり、以下のようなコードでその値のみの更新は出来
   ても、配列となっていないので、後に読み込んだ際に不具合が起きます。また、flamingo
   の受信メッセージでは、チェックして送信（submit）後の本来なら「● 発注済み」と表示
   されますが、値のみなので「発注済み」という単なる文字列になっています。これを、
   シリアライズされた本来の状態で update_post_meta したいのですが、なかなかうまく
   いきませんので、ご教示いただけると幸いです。どうぞ、よろしくお願いいたします。
 *     ```wp-block-code
       //***テンプレートファイル***
       <script type="text/javascript">
         $(document).ready(function () {
           // 上書きボタンクリック時の処理
           $("#overWriteBt").on("click", function () {
             var update_order = $('input[name="order[]"]').prop('checked')
             // フォームの値が空でない場合のみ実行
             if (update_order !== "") {
               // 投稿のID
               var postId = post_id;
               // 上書きする値
               var newValue_order = update_order;
               // メタ値を更新する
               updatePostMeta(postId, '_field_order', newValue_kasei_order);
             }
           });
           // update_post_meta() 関数の代替
           function updatePostMeta(postId, metaKey, newValue) {
             $.ajax({
               type: 'POST',
               url: '<?php echo admin_url('admin-ajax.php'); ?>',
               data: {
                 action: 'update_post_meta_action',
                 post_id: postId,
                 meta_key: metaKey,
                 new_value: newValue,
               },
               success: function (response) {
                 console.log(response); // デバッグ用にレスポンスを表示
               },
               error: function (error) {
                 console.log(error); // エラーメッセージを表示
               }
             });
           }
         });
       </script>
       ```
   
 *     ```wp-block-code
       //***functions.php***
       add_action('wp_ajax_update_post_meta_action', 'update_post_meta_action_callback');
       add_action('wp_ajax_nopriv_update_post_meta_action', 'update_post_meta_action_callback');
       function update_post_meta_action_callback() {
         $post_id = $_POST['post_id'];
         $meta_key = $_POST['meta_key'];
         $new_value = $_POST['new_value'];
         // メタ値を更新する
         update_post_meta($post_id, $meta_key, $new_value);
         // 必要に応じてレスポンスを返す（成功メッセージなど）
         echo 'メタ値が更新されました。';
         // WordPressの処理を終了する
         wp_die();
       }
       ```
   

2件の返信を表示中 - 1 - 2件目 (全2件中)

 *  [shokun0803](https://ja.wordpress.org/support/users/shokun0803/)
 * (@shokun0803)
 * [3年、 3ヶ月前](https://ja.wordpress.org/support/topic/update_post_meta%e3%81%a7%e3%82%b7%e3%83%aa%e3%82%a2%e3%83%a9%e3%82%a4%e3%82%ba%e3%81%95%e3%82%8c%e3%81%9f%e3%83%87%e3%83%bc%e3%82%bf%e3%82%92%e6%9b%b4%e6%96%b0%e3%81%97%e3%81%9f%e3%81%84/#post-11683780)
 * [@junichik](https://ja.wordpress.org/support/users/junichik/) さん、こんにちは。
 * すでに解決済みかもしれませんが…あと検証時間がなかったので具体的な解決策でもありま
   せん…
 * それを踏まえて、`update_post_meta()`を実行しようとしているという事は WordPress
   のデータベース内を直接書き換えようとしていると思われますが、 WordPress のデータベース
   内でチェックボックスがどのように保管されているか確認はされましたでしょうか。
 * まずはデータベース内のチェックボックスの保存状態を確認し、`update_post_meta()`
   を実行する際に同様のデータを作成して保存しなければならないと思います。値だけ取得
   して値を保存すれば文字列だけになってしまうのは当然かと…
 * ご参考になれば。
 *  トピック投稿者 [JunichiK](https://ja.wordpress.org/support/users/junichik/)
 * (@junichik)
 * [3年、 3ヶ月前](https://ja.wordpress.org/support/topic/update_post_meta%e3%81%a7%e3%82%b7%e3%83%aa%e3%82%a2%e3%83%a9%e3%82%a4%e3%82%ba%e3%81%95%e3%82%8c%e3%81%9f%e3%83%87%e3%83%bc%e3%82%bf%e3%82%92%e6%9b%b4%e6%96%b0%e3%81%97%e3%81%9f%e3%81%84/#post-11683781)
 * [@shokun0803](https://ja.wordpress.org/support/users/shokun0803/) さま
 * ご返信いただき、本当にありがとうございます。
   ちょうど昨日、全体的に完成しまして、
   ご報告が遅れ、申し訳ありません。結果的には、以下のコードでうまくいきました。とりあえず
   これで解決済みとさせていただきます。
 *     ```wp-block-code
       //***テンプレートファイル***
       <script type="text/javascript">
         $(document).ready(function () {
           // 上書きボタンクリック時の処理
           $("#overWriteBt").on("click", function () {
             // チェックボックスのチェック状態を取得
             var checkboxStatus = $('input[name="order[]"]').is(':checked');
             // フォームの値が空でない場合のみ実行
             if (checkboxStatus !== "") {
               // 投稿のID
               var postId = post_id;
               // 苛性注文データベースの更新処理
               $.ajax({
                 url: '<?php echo admin_url('admin-ajax.php'); ?>',
                 type: 'POST',
                 data: {
                   action: 'update_array_data',
                   update_array_status: checkboxStatus ? '発注済み' : '',
                   meta_key: '_field_order',
                   post_id: postId
                 },
                 success: function(response) {
                   // 成功時の処理
                   console.log('データベースが更新されました');
                 },
                 error: function(xhr, status, error) {
                   // エラー時の処理
                   console.log('データベースの更新でエラーが発生しました');
                 }
               });
             }
           });
         });
       </script>
       ```
   
 *     ```wp-block-code
       //***functions.php***
       // チェックボックスのデータベース更新処理
       add_action('wp_ajax_update_array_data', 'update_array_data');
       add_action('wp_ajax_nopriv_update_array_data', 'update_array_data');
       function update_array_data() {
         if (isset($_POST['update_array_status']) && isset($_POST['post_id'])) {
           $post_id = $_POST['post_id'];
           $updateArrayStatus = $_POST['update_array_status'];
           $metaKey = $_POST['meta_key'];
           // post_metaテーブルの更新
           $metaValue = array($updateArrayStatus);
           update_post_meta($post_id, $metaKey, $metaValue);
           wp_send_json_success(); // 成功レスポンスを送信
         }
       }
       ```
   

2件の返信を表示中 - 1 - 2件目 (全2件中)

 トピック「update_post_metaでシリアライズされたデータを更新したい」には新たに返信
することはできません。

## タグ

 * [カスタムフィールド](https://ja.wordpress.org/support/topic-tag/%e3%82%ab%e3%82%b9%e3%82%bf%e3%83%a0%e3%83%95%e3%82%a3%e3%83%bc%e3%83%ab%e3%83%89/)
 * [Contact Form 7](https://ja.wordpress.org/support/topic-tag/contact-form-7/)
 * [Flamingo](https://ja.wordpress.org/support/topic-tag/flamingo/)
 * [update_post_meta](https://ja.wordpress.org/support/topic-tag/update_post_meta/)

 * フォーラム: [使い方全般](https://ja.wordpress.org/support/forum/how-to-and-troubleshooting/)
 * 2件の返信
 * 2人の参加者
 * 最後の返信者: [JunichiK](https://ja.wordpress.org/support/users/junichik/)
 * 最後の活動: [3年、 3ヶ月前](https://ja.wordpress.org/support/topic/update_post_meta%e3%81%a7%e3%82%b7%e3%83%aa%e3%82%a2%e3%83%a9%e3%82%a4%e3%82%ba%e3%81%95%e3%82%8c%e3%81%9f%e3%83%87%e3%83%bc%e3%82%bf%e3%82%92%e6%9b%b4%e6%96%b0%e3%81%97%e3%81%9f%e3%81%84/#post-11683781)
 * 状態: 解決済

## トピック

### 人気のトピック

### 返信がないトピック

### サポート関連ではないトピック

### 解決済みのトピック

### 未解決のトピック

### すべてのトピック
