サポート » 使い方全般 » オリジナルメタボックスのバリデーションについて

  • 解決済 non888

    (@non888)


    functions.phpにて「add_meta_box」を利用し、下記のようにチェックボックスの独自カスタムフィールドを追加しております。
    この独自カスタムフィールドが、別プラグインで項目を管理しているカスタムフィールドの値を引用しているため、プラグイン「ACF」などが使用できずに「add_meta_box」で項目追加をしております。
    ただ、この項目を必須としたいのですが、必須状態にできずに困っております。

    ■functions.php

    add_action('admin_menu', 'add_report_fields');
    add_action('save_post', 'save_report_fields');
    
    function add_report_fields()
    {
      add_meta_box('report_cate1', 'エリア', 'insert_report_area', 'report', 'side');
    }

    add_actionの「save_post」を利用したら、実現できるのではないかと考え、POSTしたデータがない場合は、「return」としたのですが、新規追加時は公開でき、更新時はただ値が更新されずに終わったという状態になります。

    // カスタムフィールドの値を保存
    function save_report_fields($post_id)
    {
      ///// 正しい手段で送信されたデータであることを確認 ///
      //nonceがセットされていなければ不正
      if (!isset( $_POST[ '_wp_nonce' ])){
        return $post_id;
      }
    
      //nonceがセットされていても、自分で作成した値でないなら不正
      if ( ! wp_verify_nonce( $_POST['_wp_nonce'] , 'wp-nonce-key' )){
        return $post_id;
      }
    
      // 書き込み権限がなければ不正
      if (!current_user_can('edit_post', $post_id)){
        return $post_id;
      }
    
      ///// カスタムフィールドの値を更新 ///
      // 活動レポート「エリア」項目保存
      if (isset($_POST['report_areas']) && $_POST['report_areas']) {
        update_post_meta($post_id, 'report_areas', $_POST['report_areas']);
      } else {
    return;
        //delete_post_meta($post_id, 'report_areas', get_post_meta($post_id, 'report_areas', true));
      }
      return $post_id;
    }

    独自で追加したカスタムフィールドを必須にし、未入力の場合は、管理画面などでバリデーションコメント表示させることは可能でしょうか?
    何か方法がございましたら、お力添えいただけますと幸いです。

3件の返信を表示中 - 1 - 3件目 (全3件中)
  • スレッド開始 non888

    (@non888)

    難しく考えてましたが、独自jQueryを管理画面に読み込ませて、投稿を更新する際のsubmitが押されたら、jQueryでバリデーションチェックをする方法で対応しました。

    他に良い方法とかありましたらお教えいただきたいです。

    @non888 さん

    はじめまして。
    Gutenbergを利用されているという前提で、サーバサイドで生成したエラーメッセージを記事保存時に表示させたいという事かと思いますが、技術的には実現出来ます。

    試したことはありませんが、以下のコードが参考になると思います。
    https://wordpress.stackexchange.com/questions/362975/admin-notification-after-save-post-when-ajax-saving-in-gutenberg

    transientを使ったり、@wordpressのパッケージを使ってReact寄りのJavaScriptを書いたりする必要があるので、難易度的には高いかもしれません。

    ただここまでやらなくても、試されている通りフロントエンド側は自前のjQueryでチェック、サーバサイドでnonce/権限チェックやサニタイズをされていれば、セキュリティ的にも問題ないと思います。

    一点だけ改善点をお伝えすると、メタボックスの追加(add_meta_box)は、admin_menuフックではなくadd_meta_boxesフックで追加する事が推奨されています。

    スレッド開始 non888

    (@non888)

    @wildworks
    ご回答ありがとうございます。
    いろいろと情報をご提供いただき、大変ありがたいです。
    改善点含め確認し、参考にさせていただきます。

3件の返信を表示中 - 1 - 3件目 (全3件中)
  • このトピックに返信するにはログインが必要です。