WordPress Rewrite API: частина 2

Ця стаття є продовженням огляду можливостей WordPress Rewrite API. Першу частину ви можете знайти тут: WordPress Rewrite API: основи

add_rewrite_endpoint

Функція add_rewrite_endpoint() покликана дати можливість створити endpoint, іншими словами кінцеву точку запиту, для вже існуючих стандартних типів посилань. Наприклад ендпоїнт /trackback/ створено саме таким чином. Цей ендпоїнт додано до посилань для всіх постів.

Додання ендпоїнта створює додаткове правило реврайту для вказаних типів посилань (нижче про це), а також створює змінну запиту з аналогічною назвою. Наприклад, ендпоїнт /foo/bar/ означає, що створено змінну foo із значенням bar, іншими словами: ?foo=bar

Ось типовий приклад використання цієї функції:

add_rewrite_endpoint( $name, $places );

Ця функція приймає два аргумента:

  • $name – ім’я ендпоїнта
  • $places – маска ендпоїнта, що описує місце куди він повинен бути доданий; до речі, при створенні кастомного типу поста ви можете створити свою маску (на додачу до стандартних – див. нижче), щоб з її допомогою потім додавати ендпоїнти – для цього використовуйте аргумент permalink_epmask

Стандартні маски ендпоїнтів:

  • EP_PERMALINK – для пермалінків публкацій (постів)
  • EP_ATTACHMENT – для атачментів (завантажені фото, відео і інші файли)
  • EP_DATE – для архівних сторінок по даті
  • EP_YEAR – для річних архівних сторінок
  • EP_MONTH – для місячних архівних сторінок
  • EP_DAY – для архівних сторінок по днях
  • EP_ROOT – для головної сторінки
  • EP_COMMENTS – для посилань на коментарі
  • EP_SEARCH – для сторінки пошуку
  • EP_CATEGORIES – для сторінок категорій
  • EP_TAGS – для сторінок тегів
  • EP_AUTHORS – для архівних сторінок авторів
  • EP_PAGES – для сторінок (pages)
  • EP_ALL – для всіх

Загалом ендпоїнти зручно використовувати, якщо вам потрібно додати хендлер (handler або оброблювач) для ваших ajax запитів або звичайної форми. Ось приклад форми і різної її поведінки в залежності від вказаного ендпоїнта однієї і тієї ж сторінки. Ось код шаблону сторінки контактної форми:

Окрім цього ще потрібно створити ендпоїнт. Цей код необхідно додати у файл function.php вашої теми:

function uni_add_endpoint() {
    add_rewrite_endpoint( 'form', EP_PAGES );
}
add_action( 'init', 'uni_add_endpoint');

function uni_add_queryvars( $query_vars ) {
    $query_vars[] = 'form';
    return $query_vars;
}
add_filter( 'query_vars', 'uni_add_queryvars' );

Нарешті, потрібно додати скрипт, що безпосередньо оброблятиме сабміт форми. У даному випадку це не ajax форма, тож потрібно додати функцію до екшена init щоб “ловити” можливий post запит з форми:

function uni_form_handler() {
 
    // виконуємо лише якщо це наша форма
    if( isset( $_POST['uni_contact_submit'] ) ) {
 
       // ID сторінки з контактною формою
       $iContactPageId = 5;
       $sContactPageUrl = get_permalink( $iContactPageId );

       // перевірка nonce
       if ( !isset($_POST['uni_contact_nonce'] ) || !wp_verify_nonce($_POST['uni_contact_nonce'],'uni_contact_form') ) {
          $sContactPageUrl .= 'form/error';
          wp_redirect( $sContactPageUrl );
          exit();  
       }
 
       // перевірка чи заповнено поле текст
       if( empty( $_POST['uni_contact_msg'] ) ) {
          $sContactPageUrl .= 'form/error';
          wp_redirect( $sContactPageUrl );
          exit();
        }
 
        // ... тут має бути ваш код, власне те, що ви хочете робити із інформацією з контактної форми
 
        // Успішно!
        $sContactPageUrl .= 'form/success';
        wp_redirect( $sContactPageUrl );
        exit();

    }

}
add_action('init', 'uni_form_handler');

На сьогодні це все. Сподіваюсь вам було цікаво і пізнавально :) Буде ще третя частина серії про WordPress Rewrite API. Крім того, у коментарях ви можете можете запитувати чи пропонувати теми майбутніх статей!

Коментарі (2)

Вам вже є 18 років?

Для переходу по цьому посиланню ви повинні підтвердити, що вам виповнилось 18 років.

Мені немає 18 Мені вже є 18