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


16

Щось, про що я ніколи не бачив, - це найкращий спосіб підтвердити, що конкретні поля форми заповнюються правильно для метаполев.

Я хочу отримати експертні висновки про те, як найкраще перевірити спеціальні поля для будь-яких метабоксів, які можна створити. Мене цікавлять:

  • переконайтеся, що перевірка поля відбувається до публікації / оновлення публікації
  • використання класу / коду, який не суперечить іншим JavaScript Wordpress
  • дозволяє визначати конкретні поля як необхідні, тоді як інші можуть бути необов’язковими
  • перевірити поля на основі настроюваних правил, включаючи регулярні вирази для таких речей, як формат електронної пошти
  • контролювати візуальне відображення будь-яких помилок / повідомлень

Спасибі заздалегідь!

Відповіді:


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, де ви визначаєте користувацькі поля, слід додати клас "обов'язковий" для кожного поля, яке ви хочете перевірити, наприклад:

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

Всі поля з "обов'язковим" у своєму класі будуть перевірені, коли публікація буде збережена / опублікована / оновлена. Усі інші параметри перевірки (правила, стиль помилок тощо) можна встановити у функції document.ready у my_script.js; перевірити документи jQuery Validate для всіх параметрів.


Дякую, я спробую це завтра, але ви можете, будь ласка, пояснити, як робити різні перевірки. Наприклад, перевірка правильної адреси електронної пошти, що підтверджує, що не більше ніж щонайменше XX символів, що заповнено поле форми ... подібні речі?
NetConstructor.com

Також чи підтверджується це перед збереженням / оновленням публікації? Якщо ні, то як це зробити?
NetConstructor.com

Приклади та документація для плагіну jQuery Validation (зв'язаний у моїй відповіді) покажуть вам, як робити всі ці речі. Перевірка відбувається за умовчанням при надсиланні, але ви можете викликати розмиття або зміну будь-якого елемента форми для своїх спеціальних полів.
danblaker

Я реалізував це рішення, і це виглядає дуже багатообіцяючою, одна проблема, що я поміщаю у "submitHandler"? Після перевірки на jquery.validate Wordpress нічого не робить (збереження Buttun залишається в анімованому стані). Як я передам дитину назад до WP?
mike23

2
Якщо ви просто намагаєтесь повернути кнопку Опублікувати до її нормального стану, коли необхідне поле порожнє (або якась інша перевірка не вдається), вам не потрібно нічого робити з submitHandler; просто відредагуйте код validate (), щоб змінити кнопку, коли перевірка не вдалася. Це працює: jQuery ("# ​​post"). Validate ({invalidHandler: function () {jQuery ('# опублікувати'). DeleteClass ('кнопка-первинний-відключений'); 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

Я використовував цей код, дуже корисно, justa змінив:

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

Сподіваюся, це допоможе вам (працює для мене за аналогічним сценарієм)


Хоча це посилання може відповісти на питання, краще включити сюди суттєві частини відповіді та надати посилання для довідки. Відповіді лише на посилання можуть стати недійсними, якщо пов’язана сторінка зміниться.
Габріель

0

Якщо ви хочете мати змогу перевірити серверну сторону, найпростішим варіантом є використання розширених спеціальних полів для визначення вашої власної макети поля, а потім доповнення " Валідизоване поле" для встановлення валідації для кожного поля в адміністраторі WordPress.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.