В первой части этой серии, посвященной обработке ошибок в WordPress с WP_Error
класса WP_Error
, мы рассмотрели введение класса PHP, изучили свойства и методы класса, а также их роли и функции, дополненные примерами кода.
В этой заключительной части серии мы будем создавать довольно простой плагин контактной формы, чтобы продемонстрировать, как обрабатывать ошибки в разработке плагинов. Плагин контактной формы будет иметь шорткод и поддержка тегов шаблонов, чтобы они могли быть реализованы в сообщениях и страницах с использованием первого и в теме с использованием последнего
Контакт-Форма Разработка Плагинов
Контактная форма будет состоять из пяти полей формы — четырех элементов input
и элемента textarea
.
Я уверен, что вы знакомы со всеми полями контактной формы. Обратите внимание, что когда электронное письмо отправляется через контактную форму, к сообщению добавляется номер телефона. Это очевидно в функции send_mail
.
Давайте начнем кодировать плагин. Сначала заголовок плагина:
1
2
3
4
5
6
7
8
|
<?php
/*
Plugin Name: Contact Form Lite
Plugin URI: http://code.tutsplus.com
Description: Easy contact form plugin
Author: Agbonghama Collins
Author URI: http://tech4sky.com
*/
|
Плагин будет состоять из пяти функций PHP, как описано ниже.
-
contact_html_form()
будет содержать код HTML-формы плагина. -
validate_form()
обрабатывает ошибку плагина. в этой функции мы увидим обработку ошибок с использованиемWP_Error
в действии. -
send_mail()
обрабатывает отправку электронной почты. -
contact_form_function()
объединяет и обрабатывает вышеуказанные функции -
contact_form_shortcode()
является функцией обратного вызова шорткода
Код HTML-формы плагина, содержащийся в функции contact_html_form()
выглядит следующим образом.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
function contact_html_form() {
global $name, $email, $phone_number, $subject, $message;
echo ‘<form action=»‘ . get_permalink() . ‘» method=»post»>
<label for=»name»>Name <strong>*</strong></label>
<input type=»text» name=»sender_name» value=»‘ . ( isset( $_POST[‘sender_name’] ) ? $name : null ) . ‘» />
<div>
<label for=»email»>Email <strong>*</strong></label>
<input type=»text» name=»sender_email» value=»‘ . ( isset( $_POST[‘sender_email’] ) ? $email : null ) . ‘» />
</div>
<div>
<label for=»phonenumber»>Phone Number <strong>*</strong></label>
<input type=»text» name=»sender_phonenumber» value=»‘ . ( isset( $_POST[‘sender_phonenumber’] ) ? $phone_number : null ) . ‘» />
</div>
<div>
<label for=»subject»>Subject <strong>*</strong></label>
<input type=»text» name=»email_subject» value=»‘ . ( isset( $_POST[’email_subject’] ) ? $subject : null ) . ‘» />
</div>
<div>
<label for=»message»>Message <strong>*</strong></label>
<textarea name=»email_message»>’ .
</div>
<div>
<input type=»submit» name=»send_message» value=»Send» />
</div>
</form>’;
}
|
Далее идет функция обработки ошибок validate_form()
.
Следующее является ограничением, которое будет реализовано плагином, который будет выполняться функцией обработки ошибок .
Обратите внимание, что:
- ни одно поле не должно быть пустым
- поле имени должно содержать буквенный символ
- адрес электронной почты должен быть действительным
- номер телефона должен быть числовым
Функция validate_form()
будет принимать поля формы в качестве аргумента, чтобы проверять данные формы на наличие ошибок. Ниже приведен код для функции обработки ошибок, которая обеспечивает приведенное выше ограничение для плагина, полностью закомментированное, поэтому вы легко отследите его код
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
function validate_form( $name, $email, $phone_number, $subject, $message ) {
// Make the WP_Error object global
global $form_error;
// instantiate the class
$form_error = new WP_Error;
// If any field is left empty, add the error message to the error object
if ( empty( $name ) || empty( $email ) || empty( $phone_number ) || empty( $subject ) || empty( $message ) ) {
$form_error->add( ‘field’, ‘No field should be left empty’ );
}
// if the name field isn’t alphabetic, add the error message
if ( ! ctype_alpha( $name ) ) {
$form_error->add( ‘invalid_name’, ‘Invalid name entered’ );
}
// Check if the email is valid
if ( ! is_email( $email ) ) {
$form_error->add( ‘invalid_email’, ‘Email is not valid’ );
}
// if phone number isn’t numeric, throw an error
if ( ! is_numeric( $phone_number ) ) {
$form_error->add( ‘phone_number’, ‘Phone-number is not numbers’ );
}
// if $form_error is WordPress Error, loop through the error object
// and echo the error
if ( is_wp_error( $form_error ) ) {
foreach ( $form_error->get_error_messages() as $error ) {
echo ‘<div>’;
echo ‘<strong>ERROR</strong>:’;
echo $error .
echo ‘</div>’;
}
}
}
|
Функция send_mail
обрабатывает отправку электронной почты.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
function send_mail( $name, $email, $phone_number, $subject, $message ) {
global $form_error;
// Ensure WP_Error object ($form_error) contain no error
if ( 1 > count( $form_error->get_error_messages() ) ) {
// sanitize user form input
$name = sanitize_text_field( $name );
$email = sanitize_email( $email );
$phone_number = esc_attr( $phone_number );
$subject = sanitize_text_field( $subject );
$message = esc_textarea( $message );
// set the variable argument use by the wp_mail
$message .= ‘\n Phone Number:’ .
$to = ‘[email protected]’;
$headers = «From: $name <$email>» .
// If email has been process for sending, display a success message
if ( wp_mail( $to, $subject, $message, $headers ) ) {
echo «Thanks for contacting me.»;
}
}
}
|
Давайте посмотрим, что происходит в функции send_mail
.
Во-первых, объект $form_error
сделан глобальным, поэтому к нему можно получить доступ вне области действия функции. Проверяется, чтобы убедиться, что объект $form_error
не содержит сообщений об ошибках. Если это правда, ввод контактной формы очищается.
Переменная $to
хранит адрес электронной почты, на который будет отправлено сообщение, отправленное через контактную форму. В стандартном плагине контактной формы переменная должна содержать электронную почту администратора WordPress, полученную из базы данных или из настроек плагина.
Обратите внимание на то, как телефонный номер соединяется с сообщением.
Наконец, функция wp_mail
отправляет почту.
Функция contact_form_function()
обрабатывает функцию и также служит тегом шаблона плагина.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
|
function contact_form_function() {
global $name, $email, $phone_number, $subject, $message;
if ( isset($_POST[‘send_message’]) ) {
// Get the form data
$name = $_POST[‘sender_name’];
$email = $_POST[‘sender_email’];
$phone_number = $_POST[‘sender_phonenumber’];
$subject = $_POST[’email_subject’];
$message = $_POST[’email_message’];
// validate the user form input
validate_form( $name, $email, $phone_number, $subject, $message );
// send the mail
send_mail( $name, $email, $phone_number, $subject, $message );
}
// display the contact form
contact_html_form();
}
|
Помните, что плагин контактной формы будет иметь поддержку шорткода. Ниже приведена функция обратного вызова add_shortcode
вместе с функцией add_shortcode
которая регистрирует шорткод.
1
2
3
4
5
6
7
8
9
|
// Register a new shortcode: [cf_contact_form]
add_shortcode(‘cf_contact_form’, ‘contact_form_shortcode’);
// Shortcode callback function
function contact_form_shortcode() {
ob_start();
contact_form_function();
return ob_get_clean();
}
|
Использование плагина
Используйте [cf_contact_form]
чтобы включить контактную форму в сообщение или страницу.
Чтобы включить контактную форму в вашу тему, используйте тег шаблона <?php contact_form_function(); ?>
<?php contact_form_function(); ?>
.
Резюме
В этой статье мы рассмотрели, как использовать класс the WP_Error
для обработки ошибок в плагинах. Я также показал нам практический пример использования того, как обрабатывать ошибки в плагине, используя класс. Вы можете найти файл плагина, прикрепленный к этой статье.
Удачного кодирования!