カスタムメタボックスの値と必須フィールドの検証


16

カスタムの投稿タイプのメタボックスについて、特定のフォームフィールドが正しく記入されていることを検証する最良の方法は、これまでカバーしたことがなかったものです。

作成する可能性のあるメタボックスのカスタムフィールドを検証する最善の方法について専門家の意見を求めています。私の興味は:

  • 投稿が公開/更新される前にフィールド検証が行われることを確認します
  • 他のワードプレスのjavascriptと競合しないクラス/コードを利用する
  • 必要に応じて特定のフィールドを定義できますが、他のフィールドはオプションです
  • メール形式などの正規表現を含むカスタマイズ可能なルールに基づいてフィールドを検証する
  • エラー/通知の視覚的な表示を制御する

前もって感謝します!

回答:


21

最も簡単な方法は、jQuery Validateプラグインを介してJavascript検証を追加することです。最も基本的なチュートリアルは次のとおりです。

add_meta_box呼び出しの近くで、jQuery Validateプラグインと単純なスクリプトのJSファイルをキューに入れます。

add_action('admin_enqueue_scripts', 'add_my_js');   
function add_my_js(){    
  wp_enqueue_script('my_validate', 'path/to/jquery.validate.min.js', array('jquery'));
  wp_enqueue_script('my_script_js', 'path/to/my_script.js');
}

次に、my_script.jsに以下を含めます。

jQuery().ready(function() {
    jQuery("#post").validate();
});

これにより、投稿フォームで検証が有効になります。次に、カスタムフィールドを定義するadd_meta_boxコールバックで、検証する各フィールドに「必須」クラスを追加します。

<input type="text" name="my_custom_text_field" class="required"/>

クラスに「必須」が含まれるすべてのフィールドは、投稿が保存/公開/更新されるときに検証されます。他のすべての検証オプション(ルール、エラースタイリングなど)は、my_script.jsのdocument.ready関数で設定できます。すべてのオプションについては、jQuery Validateドキュメントを確認してください。


明日はこれを試してみますが、さまざまな検証を行う方法を説明してください。たとえば、正しい電子メールアドレスの検証、XX文字以上または少なくともXX文字がないこと、フォームフィールドに入力されていることの検証など...
NetConstructor.com

また、これは投稿が保存/更新される前に検証されますか?そうでない場合、どうすればそれができますか?
NetConstructor.com

jQuery Validationプラグインの例とドキュメント(私の回答にリンクされています)は、これらすべてを行う方法を示します。検証はデフォルトで送信時に行われますが、カスタムフィールドのフォーム要素のぼかしまたは変更時にトリガーできます。
ダンブラーカー

私はこのソリューションを実装しましたが、非常に有望に見えますが、1つの問題があります。「submitHandler」に何を入れるのですか?jquery.validateで検証した後、Wordpressは何もしません(buttunはアニメーション状態のままです)。赤ちゃんをWPに戻す方法は?
mike23

2
必要なフィールドが空の場合(または他の検証が失敗した場合)に[発行]ボタンを通常の状態に戻そうとしている場合は、submitHandlerで何もする必要はありません。validate()コードを編集して、検証が失敗したときにボタンを変更するだけです。これは動作します:jQuery( "#post")。validate({invalidHandler:function(){jQuery( '#publish')。removeClass( 'button-primary-disabled'); jQuery( '#ajax-loading')。css ( 'visibility'、 'hidden');}});
ダンブラーカー

2

jQuery検証を追加するための完全な基本コード:

  1. 検証スクリプトをキューに入れます。jQueryはすでにエンキューされていると思います。

    add_action('admin_enqueue_scripts',function($id){
        $validation',$validation_js_url = #your validation.js source;
        wp_register_script( 'validation',$validation_js_url,array(),'',true );
        wp_enqueue_script( 'validation' );
    });
  2. jsファイルまたはスクリプトタグで:

    jQuery(document).ready(function($){
        var form = $("form[name='post']");
        $(form).find("input[type='submit']").click(function(e){
            e.preventDefault();
            $(form).validate();
    
            if($(form).valid())
            {
                $("#ajax-loading").show();
                $(form).submit();
            }else{
                $("#publish").removeClass().addClass("button-primary");
                $("#ajax-loading").hide();
            }
        });
    });
  3. 完了:)


サーバー側はどうですか?
NetConstructor.com

2

私はこのコードを使用しましたが、非常に役に立ちましたが、変更されました:

$(form).find("input[type='submit']").click(function(e){

に:

$(form).find("#publish").click(function(e){

'メインフォーム内に別のフォームがある場合、スクリプトが起動します。

そして:

$(form).submit();

に:

$(this).submit();

「最初の行は投稿を下書きとしてのみ保存するため、これ以上公開することはできません。

ここにすべてが書かれています:http : //allgraphics.it/blog/2012/10/jquery-validation-sui-campi-di-input-postcustom-post-di-wordpress/


2

PHPコードを使用してメタボックスフィールドを検証する問題を解決するためにこのアプローチを見つけました

https://tommcfarlin.com/post-meta-data-error-messages/

これがあなたを助けることを願っています(同様のシナリオで私のために働く)


このリンクは質問に回答するかもしれませんが、回答の重要な部分をここに含め、参照用のリンクを提供する方が良いでしょう。リンクされたページが変更されると、リンクのみの回答が無効になる可能性があります。
ガブリエル

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.