Як поводитися з поданням форми?


13

Я новачок у wordpress і тому стикаюся з деякими проблемами.

Сценарій використання випадку такий:

  1. Користувачеві відображається анкета для створення клубу в його школі.
  2. Користувач заповнює форму і натискає кнопку "Надіслати".
  3. Форму потрібно підтвердити.
  4. Якщо перевірка пройшла успішно, дані зберігаються у користувальницькій таблиці club_detailsв db, а користувачеві відображається якесь повідомлення (наприклад: Дякуємо за подання. Ваша заявка надсилається адміністратору для затвердження.) Інші відповідні повідомлення про помилки відображаються користувачу.
  5. Адміністратор переходить до панелі адміністратора Wordpress, щоб затвердити очікувані запити для клубу. (Дані витягуються з db та показуються адміністратору).

Я зробив наступне:

  • для 1) Я створив форму / сторінку заявки за допомогою редактора HTML Wordpress.
  • для 3) У мене є файл javascript ( validation.js), який містить код перевірки.
  • для 4) У мене є файл php ( club-functions.php), який має функцію storeInDB()зберігання реквізитів програми у спеціальній таблиці в db.
  • для 5) Я створив власну папку плагінів і додав файл php ( club.php), який відображає дані адміністратора адміністратору на панелі адміністратора Wordpress.

Я застряг у такому місці: Як обробляти подання форми. Де я повинен розмістити код, який викликає перевірку функції JavaScript і пізніше викликає storeInDB()функцію.

Надайте, будь ласка, кілька пропозицій щодо того, як цього досягти і чи хороший такий підхід? Заздалегідь дякую

Відповіді:


13

Вам слід скористатися функцією wp_ajaxабо wp_ajax_nopriv.

Перш за все, слід вказати URL-адресу адміністратора ajax як значення атрибута дії у формі подання.

<form id="" action="<?php echo admin_url('admin-ajax.php'); ?>" method="post" class="form" >

Таким чином форма за замовчуванням буде представлена ​​на адресу admin-ajax.php (без JavaScript). Ви можете використовувати JavaScript, щоб змусити його працювати за допомогою AJAX.

Далі йде функція, яка використовуватиме подані дані. Всередину форми покладіть а wp_nonce_fieldта прихований вхід з іменем дії. Моє значення дії add_transfer.

<?php wp_nonce_field('add_transfer','security-code-here'); ?>
<input name="action" value="add_transfer" type="hidden">

Ви можете розмістити функцію, яка буде обробляти цю форму, у function.php або у вашому файлі плагіна. Ви можете використовувати wp_ajax_+ ім'я дії, якщо це форма лише для ввійшли користувачів. Для користувачів, які не ввійшли в систему, використовуйте wp_ajax_noprivнатомість + ім'я дії.

add_action('wp_ajax_add_transfer', 'process_add_transfer');

function process_add_transfer() {
if ( empty($_POST) || !wp_verify_nonce($_POST['security-code-here'],'add_transfer') ) {
    echo 'You targeted the right function, but sorry, your nonce did not verify.';
    die();
} else {
    // do your function here 
    wp_redirect($redirect_url_for_non_ajax_request);
}

Дякую ifdion за відповідь. Я створю форму у редакторі Wordpress HTML. Отже, чи добре включити php-код у форму, оскільки мені доведеться встановити плагін "Exec-PHP", який, на мою думку, є надмірним? Будь ласка, поділіться своїми думками.
Пуджа

Просто замініть значення дії на your-site-url.com/wp-admin/admin-ajax.php .
ifdion

Це працює?
ifdion

1
чи є хороший спосіб досягти того ж, але без адмін-ajax.php?
Тахір Ясін

1
@TheWPNovice Я думаю, він все ще знаходиться в /wp-admin/каталозі. Зауважте, що вам не потрібно нічого змінювати або додавати у цей файл.
ifdion

2

По-перше, дозвольте мені сказати, що перевірка JavaScript працює на стороні клієнта. тому якщо користувач, відключивши js, у вас виникнуть проблеми.

Таким чином, ви також повинні перевірити вхідні значення на стороні сервера.

маючи на увазі:

Код js можна викликати безпосередньо зі сторінки, де знаходиться форма. атрибут onsubmit - це звичайний спосіб його закликати.

приклад

<form onSubmit="validateForms()" method="post" action="domain.com/club-contacts">
    <label for="app_email">Application</label>
    <input type="text" name="app_email" id="app_email" value="" />
    <input type="hidden" name="app_application" value="1" />
    <input type="submit" name="app_form_send" value="Send" />
</form>

page.php

Це також може бути ваша власна сторінка шаблону або single.php. у цьому випадку 99 - це ідентифікатор певної сторінки, яку ви хочете вказати користувачеві, якщо вона була схвалена чи була помилка.

if ( get_the_ID() == '99' ) {
  // lets validate the input
  if( !empty($_POST['app_application']) && $_POST['app_application'] == "1"  ) {
   if(!empty($_POST['app_email'])) {
    // check the codex for [Data_Validation][1]
    }
  }
}

Дякую peteroak за відповідь. Де я можу зателефонувати за PHP-кодом для подальшої обробки даних форми?
Pooja

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