Проверка значений пользовательских мета-полей и обязательных полей

12 сент. 2010 г., 19:48:27
Просмотры: 20.6K
Голосов: 17

Я никогда не встречал информации о лучшем способе проверки корректности заполнения определенных полей форм для метабоксов пользовательских типов записей.

Я хотел бы получить экспертное мнение о том, как лучше всего проводить валидацию пользовательских полей для любых создаваемых метабоксов. Меня интересует:

  • обеспечение проверки полей перед публикацией/обновлением записи
  • использование класса/кода, который не конфликтует с другим JavaScript WordPress
  • возможность определять конкретные поля как обязательные, в то время как другие могут быть необязательными
  • валидация полей на основе настраиваемых правил, включая регулярные выражения для проверки формата email
  • управление визуальным отображением любых ошибок/уведомлений

Заранее спасибо!

0
Все ответы на вопрос 5
5
21

Самый простой способ — добавить валидацию через JavaScript с помощью плагина jQuery Validate. Вот базовое руководство:

Рядом с вызовом 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, где вы определяете пользовательские поля, добавьте класс "required" для каждого поля, которое нужно валидировать:

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

Все поля с классом "required" будут проверяться при сохранении/публикации/обновлении записи. Все остальные параметры валидации (правила, стили ошибок и т. д.) можно настроить в функции document.ready в файле my_script.js — подробности смотрите в документации jQuery Validate.

28 сент. 2010 г. 01:13:07
Комментарии

Спасибо, я попробую это завтра, но не могли бы вы объяснить, как делать различные проверки. Например, проверку корректности email-адреса, проверку на то, что введено не больше или не меньше XX символов, что поле формы заполнено... такие вещи?

NetConstructor.com NetConstructor.com
29 сент. 2010 г. 11:54:24

Также, происходит ли эта проверка до сохранения/обновления записи? Если нет, то как это можно сделать?

NetConstructor.com NetConstructor.com
29 сент. 2010 г. 11:55:04

Примеры и документация для плагина jQuery Validation (ссылка в моем ответе) покажут вам, как делать все эти проверки. По умолчанию валидация происходит при отправке формы, но вы можете запускать ее при потере фокуса (blur) или изменении (change) для любых элементов формы в ваших пользовательских полях.

danblaker danblaker
29 сент. 2010 г. 20:13:25

Я реализовал это решение, и оно выглядит очень перспективным, но есть одна проблема: что мне следует указать в 'submitHandler'? После валидации с помощью jquery.validate WordPress ничего не делает (кнопка сохранения остаётся в анимированном состоянии). Как передать управление обратно в WP?

mike23 mike23
11 мая 2011 г. 12:16:15

Если вы просто пытаетесь вернуть кнопку "Опубликовать" в нормальное состояние, когда обязательное поле пустое (или другая проверка не пройдена), вам не нужно ничего делать с submitHandler; просто отредактируйте код validate(), чтобы изменить кнопку при неудачной валидации. Это работает: jQuery("#post").validate({ invalidHandler: function() { jQuery('#publish').removeClass('button-primary-disabled'); jQuery('#ajax-loading').css('visibility', 'hidden'); } });

danblaker danblaker
14 мая 2011 г. 01:14:37
1

Я нашел этот подход для решения проблемы валидации полей метабоксов с использованием PHP-кода

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

Надеюсь, это поможет вам (у меня сработало в похожем сценарии)

9 июн. 2016 г. 20:28:48
Комментарии

Хотя данная ссылка может отвечать на вопрос, лучше включить основные части ответа здесь и предоставить ссылку для справки. Ответы, состоящие только из ссылки, могут стать недействительными, если страница по ссылке изменится.

Gabriel Gabriel
9 июн. 2016 г. 20:50:58
1

Полный базовый код для добавления jQuery Validation:

  1. Подключение скрипта валидации. Предполагается, что jQuery уже подключен.

    add_action('admin_enqueue_scripts',function($id){
        $validation',$validation_js_url = #ваш источник validation.js;
        wp_register_script( 'validation',$validation_js_url,array(),'',true );
        wp_enqueue_script( 'validation' );
    });
    
  2. В js файле или теге 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. Готово :)

15 мая 2012 г. 20:50:40
Комментарии

А что насчёт серверной части?

NetConstructor.com NetConstructor.com
28 июн. 2012 г. 09:12:31
0

Я использовал этот код, он очень полезен, только изменил:

$(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/

20 нояб. 2012 г. 12:46:42
0

Если вам нужна возможность серверной валидации, самый простой вариант — использовать плагин Advanced Custom Fields для определения макетов пользовательских полей. Затем можно применить дополнение Validated Field, чтобы настроить валидацию для каждого поля прямо в админке WordPress.

24 июн. 2015 г. 01:47:38