• 解決済 JunichiK

    (@junichik)


    いつもお世話になっております。

    「Contact Form 7」で作成したフォームの送信データを「flamingo」でデータベースに保存しています。
    別途上書きボタンを用意して、送信後に update_post_meta で上書き出来るようにしており、テキストのinput要素はうまくいっているのですが、chackboxが上書き出来ずに困っております。
    テキストinput要素の上書きは以下のコードでうまくいっています。

    //テンプレートファイル
    <?php if(is_page('no-2-wtcm-submit')) {
    $today_data = '';
    if(isset($_POST['pre-today'])) {
      $today_data = $_POST['pre-today'];
    }
    $args_today = array(
        'post_type' => 'flamingo_inbound',
        'posts_per_page' => 1,
        'orderby' => 'date',
        'order' => 'DESC',
        'meta_query' => array(
            'relation' => 'AND',
            array(
                'key' => '_field_measuring-date',
                'value' => $today_data,
                'compare' => '='
            ),
            array(
                'key' => '_field_your-title',
                'value' => 'wtcm',
                'compare' => '='
            )
        )
    );
    
    $flamingo_query_today = new WP_Query( $args_today );
    
    if ( $flamingo_query_today->have_posts() ) {
      $flamingo_query_today->the_post();
        $post_id = get_the_ID(); // 現在の投稿のIDを取得
          $pac_use = get_post_meta($post_id, '_field_pac-use', true);
    }
    wp_reset_postdata(); ?>
    <script type="text/javascript">
      $(document).ready(function () {
        let pac_use = '<?php echo $pac_use; ?>';
        let post_id = '<?php echo $post_id; ?>';
        $('input[name="pac-use"]').val(pac_use);
        // 上書きボタンクリック時の処理
        $("#overWriteBt").on("click", function () {
          // 入力値の取得
          var update_pac_use = $('input[name="pac-use"]').val();
          if (update_pac_use !== "" ) {
            var postId = post_id;
            // 上書きする値
            var newValue_pac_use = update_pac_use;
            // メタ値を更新する
            updatePostMeta(postId, '_field_pac-use', newValue_pac_use);
    
            $('#overWriteMsg').html('<span>データを上書きしました。</span>');
            $('#successMsg').html('<span>'+ today_data + 'のデータを上書きしました。</span>');
            $('#chemicalsForm').addClass('hide');
          } else {
            $('#overWriteMsg').html('<span class="red">入力値が空です。空欄に入力して下さい。</span>');
          }
        });
        // 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>
    <?php } ?>
    
    //functions.php
    // update_post_meta_action の処理
    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();
    }
    

    このテンプレートファイルに、checkboxの値を取得するために、

    var update_pac_order = $('#pacOrderCheck input[type="checkbox"]:checked').val();

    やpropを使用して、テキストinput同様の処理をしても上書きされず、

    $('#pacOrderCheck input[type="checkbox"]:checked').each(function() {
     var update_pac_order = $(this).val();
     });

    やforEachを使用すると、上書きボタン自体が効かなくなります。

    いろいろ試行錯誤しましたが、解決に至りませんので、ご教示願えれば助かります。
    よろしくお願いいたします。

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • モデレーター Takayuki Miyoshi

    (@takayukister)

    問題のサイトはどこで見られますか? URL を教えてください。

    トピック投稿者 JunichiK

    (@junichik)

    >Takayuki Miyoshi 様

    ありがとうございます。
    早速にご返信くださったのに、まずは謝らなければなりません。
    単なる私の不注意だったようで、申し訳ありません。
    結論から申し上げると、単純な変数の重複でした。

    チェックボックスの無いテキストinputのみの別のテンプレートファイルではうまくいっていたので、てっきり、チェックボックスの値の取得で躓いているものだと思っておりました。
    しかし、問題のテンプレートファイルでは、更に WP_Query で別のループを回していることを忘れておりました。
    そして、そのループでも $post_id = get_the_ID(); としていたので、$post_id が重複していたようです。$post_id_2 とすることで正常に動作するようになりました。

    先は長いので、また分からないことがあれば質問させていただきます。
    今後ともよろしくお願いいたします。

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • トピック「flamingoのカスタムフィールドのCheckboxの値を更新したい」には新たに返信することはできません。