การตรวจสอบค่า Meta Box แบบกำหนดเอง & ฟิลด์ที่จำเป็น


16

สิ่งที่ฉันไม่เคยเห็นครอบคลุมเป็นวิธีที่ดีที่สุดในการตรวจสอบว่าเขตข้อมูลแบบฟอร์มเฉพาะกรอกอย่างถูกต้องสำหรับกล่องเมตาประเภทโพสต์ที่กำหนดเอง

ฉันกำลังมองหาความคิดเห็นของผู้เชี่ยวชาญเกี่ยวกับวิธีตรวจสอบฟิลด์ที่กำหนดเองที่ดีที่สุดสำหรับ metaboxes ใด ๆ ที่อาจสร้างขึ้น ความสนใจของฉันคือ:

  • ตรวจสอบให้แน่ใจว่ามีการตรวจสอบฟิลด์เกิดขึ้นก่อนที่จะเผยแพร่ / อัปเดตโพสต์
  • ใช้คลาส / รหัสที่ไม่ขัดแย้งกับจาวาสคริปต์ WordPress อื่น ๆ
  • ช่วยให้คุณกำหนดเขตข้อมูลเฉพาะตามที่จำเป็นในขณะที่คนอื่นอาจเป็นตัวเลือก
  • ตรวจสอบฟิลด์ตามกฎที่ปรับแต่งได้รวมถึง regex สำหรับสิ่งต่าง ๆ เช่นรูปแบบอีเมล
  • ควบคุมการแสดงภาพข้อผิดพลาด / ประกาศใด ๆ

ขอบคุณล่วงหน้า!

คำตอบ:


21

วิธีที่ง่ายที่สุดคือการเพิ่มการตรวจสอบ Javascript ผ่านทางปลั๊กอิน jQuery ตรวจสอบ นี่คือคำแนะนำพื้นฐานที่สุด:

ใกล้กับการเรียกใช้งาน add_meta_box ของคุณจัดคิวปลั๊กอินการตรวจสอบ jQuery รวมถึงไฟล์ 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();
});

สิ่งนี้จะเปิดใช้งานการตรวจสอบความถูกต้องในแบบฟอร์มโพสต์ จากนั้นในการเรียกกลับแบบเพิ่มที่คุณกำหนดเขตข้อมูลที่กำหนดเองคุณจะต้องเพิ่มคลาส "จำเป็น" สำหรับแต่ละฟิลด์ที่คุณต้องการตรวจสอบความถูกต้องเช่น:

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

เขตข้อมูลทั้งหมดที่มี "จำเป็น" ในชั้นเรียนของพวกเขาจะถูกตรวจสอบเมื่อโพสต์จะถูกบันทึก / เผยแพร่ / ปรับปรุง ตัวเลือกการตรวจสอบอื่น ๆ ทั้งหมด (กฎ, การใส่สไตล์ผิดพลาด ฯลฯ ) สามารถตั้งค่าในฟังก์ชั่น document.ready ใน my_script.js; ตรวจสอบ jQuery ตรวจสอบเอกสารสำหรับตัวเลือกทั้งหมด


ขอบคุณฉันจะลองทำสิ่งนี้ในวันพรุ่งนี้ แต่คุณช่วยอธิบายวิธีการตรวจสอบที่แตกต่างกันได้ไหม ตัวอย่างเช่นการตรวจสอบที่อยู่อีเมลที่ถูกต้องตรวจสอบว่ามีอักขระไม่เกิน XX ตัวหรืออย่างน้อยที่กรอกแบบฟอร์มฟิลด์ ... สิ่งเช่นนั้น?
NetConstructor.com

นอกจากนี้ยังมีการตรวจสอบก่อนที่โพสต์จะถูกบันทึก / อัพเดท? ถ้าไม่ฉันจะทำอย่างไร
NetConstructor.com

ตัวอย่างและเอกสารประกอบสำหรับปลั๊กอินการตรวจสอบ jQuery (ลิงก์ในคำตอบของฉัน) จะแสดงวิธีการทำสิ่งเหล่านั้นทั้งหมด การตรวจสอบความถูกต้องเกิดขึ้นเมื่อส่งตามค่าเริ่มต้น แต่คุณสามารถเรียกใช้งานแบบเบลอหรือเปลี่ยนแปลงองค์ประกอบองค์ประกอบสำหรับฟิลด์ที่กำหนดเองของคุณ
danblaker

ฉันใช้โซลูชันนี้และดูเหมือนว่าจะมีแนวโน้มมาก แต่มีปัญหาอย่างหนึ่งฉันจะใส่อะไรใน 'submitHandler' หลังจากตรวจสอบกับ jquery.validate แล้ว Wordpress ไม่ทำอะไรเลย (บันทึก buttun ยังคงอยู่ในสถานะภาพเคลื่อนไหว) ฉันจะส่งลูกกลับไปที่ WP ได้อย่างไร
mike23

2
หากคุณเพียงแค่พยายามให้ปุ่มเผยแพร่กลับสู่สถานะปกติเมื่อช่องที่ต้องการว่างเปล่า (หรือการตรวจสอบอื่น ๆ ล้มเหลว) คุณไม่ควรทำอะไรกับ submitHandler เพียงแก้ไขรหัสตรวจสอบ () เพื่อเปลี่ยนปุ่มเมื่อการตรวจสอบล้มเหลว ใช้งานได้: jQuery ("# ​​โพสต์"). ตรวจสอบ ({invalidHandler: function () {jQuery ('# ประกาศ'). removeClass ('ปุ่ม - หลัก - ปิดการใช้งาน'); jQuery ('# ajax-loading') css ('การมองเห็น', 'ซ่อน');}});
danblaker

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

ฉันพบวิธีการนี้เพื่อแก้ปัญหาการตรวจสอบเขตข้อมูล metabox โดยใช้รหัส PHP

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

หวังว่าสิ่งนี้จะช่วยคุณได้ (เหมาะกับฉันในสถานการณ์ที่คล้ายกัน)


แม้ว่าลิงก์นี้อาจตอบคำถามได้ดีกว่าหากรวมส่วนสำคัญของคำตอบไว้ที่นี่และให้ลิงก์สำหรับการอ้างอิง คำตอบสำหรับลิงค์เท่านั้นอาจไม่ถูกต้องหากหน้าเว็บที่เชื่อมโยงมีการเปลี่ยนแปลง
Gabriel

0

ถ้าคุณต้องการที่จะตรวจสอบฝั่งเซิร์ฟเวอร์ตัวเลือกที่ง่ายที่สุดคือการใช้Advanced Custom Fieldsเพื่อกำหนดเค้าโครงฟิลด์ที่กำหนดเองของคุณจากนั้นAdd-on ของฟิลด์ที่ผ่านการตรวจสอบเพื่อตั้งค่าการตรวจสอบต่อฟิลด์ใน WordPress Admin

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.