Статьи

Обработка ошибок WordPress с WP_Error Class II

В первой части этой серии, посвященной обработке ошибок в 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, как описано ниже.

  1. contact_html_form() будет содержать код HTML-формы плагина.
  2. validate_form() обрабатывает ошибку плагина. в этой функции мы увидим обработку ошибок с использованием WP_Error в действии.
  3. send_mail() обрабатывает отправку электронной почты.
  4. contact_form_function() объединяет и обрабатывает вышеуказанные функции
  5. 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 для обработки ошибок в плагинах. Я также показал нам практический пример использования того, как обрабатывать ошибки в плагине, используя класс. Вы можете найти файл плагина, прикрепленный к этой статье.

Удачного кодирования!