Xác thực các giá trị hộp meta tùy chỉnh & các trường bắt buộc


16

Một cái gì đó mà tôi chưa bao giờ thấy được bảo hiểm là cách tốt nhất để xác thực rằng các trường biểu mẫu cụ thể được điền chính xác cho các hộp meta loại bài đăng tùy chỉnh.

Tôi đang tìm kiếm ý kiến ​​chuyên gia về cách tốt nhất để xác thực các trường tùy chỉnh cho bất kỳ metabox nào mà người ta có thể tạo. Sở thích của tôi là:

  • đảm bảo xác thực trường diễn ra trước khi bài đăng được xuất bản / cập nhật
  • sử dụng một lớp / mã không xung đột với javascript wordpress khác
  • cho phép bạn xác định các trường cụ thể theo yêu cầu trong khi các trường khác có thể là tùy chọn
  • xác thực các trường dựa trên các quy tắc tùy chỉnh bao gồm regex cho những thứ như định dạng email
  • kiểm soát hiển thị trực quan của bất kỳ lỗi / thông báo

Cảm ơn trước!

Câu trả lời:


21

Cách dễ nhất là thêm xác thực Javascript thông qua plugin Xác thực jQuery . Đây là hướng dẫn cơ bản nhất:

Gần cuộc gọi add_meta_box của bạn, hãy liệt kê plugin jQuery xác thực cũng như một tệp JS cho tập lệnh đơn giản của bạn:

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');
}

Sau đó, trong my_script.js bao gồm:

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

Điều này sẽ cho phép xác nhận trên mẫu bài. Sau đó, trong hàm gọi lại add_meta_box nơi bạn xác định các trường tùy chỉnh, bạn sẽ thêm một lớp "bắt buộc" cho mỗi trường bạn muốn xác thực, như vậy:

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

Tất cả các trường có "bắt buộc" trong lớp của họ sẽ được xác thực khi bài đăng được lưu / xuất bản / cập nhật. Tất cả các tùy chọn xác thực khác (quy tắc, kiểu lỗi, v.v.) có thể được đặt trong hàm document. Yet trong my_script.js; kiểm tra các tài liệu xác thực jQuery cho tất cả các tùy chọn.


Cảm ơn bạn, tôi sẽ thử cái này vào ngày mai nhưng bạn có thể vui lòng giải thích cách thực hiện các xác nhận khác nhau. Ví dụ: xác thực cho một địa chỉ email chính xác, xác thực rằng không có nhiều hơn hoặc ít nhất XX ký tự, rằng một trường biểu mẫu được điền vào ... những thứ như vậy?
NetConstructor.com

Ngoài ra, điều này có xác nhận trước khi bài đăng được lưu / cập nhật không? Nếu không, làm thế nào tôi có thể làm điều đó?
NetConstructor.com

Các ví dụ và tài liệu cho plugin Xác thực jQuery (được liên kết trong câu trả lời của tôi) sẽ chỉ cho bạn cách thực hiện tất cả những điều đó. Xác thực xảy ra khi gửi theo mặc định nhưng bạn có thể kích hoạt nó khi mờ hoặc thay đổi đối với bất kỳ thành phần biểu mẫu nào cho các trường tùy chỉnh của bạn.
danblaker

Tôi đã thực hiện giải pháp này và nó có vẻ rất hứa hẹn, tuy nhiên, một vấn đề, tôi phải đặt cái gì trong 'submitHandler'? Sau khi xác thực với jquery.validate, Wordpress không làm gì cả (lưu mông vẫn ở trạng thái hoạt hình). Làm thế nào để tôi đưa em bé trở lại WP?
mike23

2
Nếu bạn chỉ đang cố gắng đưa nút Xuất bản trở lại trạng thái bình thường khi một trường bắt buộc trống (hoặc một số xác thực khác không thành công), bạn không cần phải làm gì với Trình gửi; chỉ cần chỉnh sửa mã xác thực () để thay đổi nút khi xác thực không thành công. Điều này hoạt động: jQuery ("# ​​post"). Validate ({không hợp lệ: hàm () ('tầm nhìn', 'ẩn');}});
danblaker

2

Mã cơ bản hoàn chỉnh để thêm xác thực jQuery:

  1. Enqueue kịch bản xác nhận. Tôi giả sử jQuery đã bị chinh phục.

    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. Trong tệp js hoặc thẻ script:

    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. Làm xong :)


Còn về phía máy chủ thì sao?
NetConstructor.com

2

Tôi đã sử dụng mã này, rất hữu ích, justa đã thay đổi:

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

Đến:

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

Vì nếu bạn có một biểu mẫu khác bên trong biểu mẫu chính thì điều này sẽ bắt đầu tập lệnh.

Và:

$(form).submit();

Đến:

$(this).submit();

Ause Vì dòng đầu tiên chỉ lưu bài dưới dạng bản nháp và bạn không thể xuất bản nó nữa.

Viết tất cả mọi thứ ở đây: http://allgraphics.it/blog/2012/10/jquery-validation-sui-campi-di-input-postcustom-post-di-wordpress/


2

Tôi đã tìm thấy cách tiếp cận này để giải quyết vấn đề xác thực các trường metabox bằng mã PHP

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

Hy vọng điều này sẽ giúp bạn (làm việc cho tôi trong một kịch bản tương tự)


Mặc dù liên kết này có thể trả lời câu hỏi, tốt hơn là bao gồm các phần thiết yếu của câu trả lời ở đây và cung cấp liên kết để tham khảo. Câu trả lời chỉ liên kết có thể trở nên không hợp lệ nếu trang được liên kết thay đổi.
Gabriel

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.