Отключаем Reserved Terms в Wordpress

Опубликовано 0 комментариев 678 просмотров
Отключаем Reserved Terms в Wordpress

Заголовок не совсем соответствует тексту, но понятней описать не получилось.

В WordPress существует такое понятие, как Reserved Terms - зарезирвированные термины. Это список из ключевых слов, которые использует CMS и которые не рекомендуется использовать при работе с функционалом сайта. Вот полный их список:

attachment, attachment_id, author, author_name, calendar, cat, category, category__and, category_in, category__not_in, category_name, comments_per_page, comments_popup, custom, customize_messenger_channel, customized, cpage, day, debug, embed, error, exactfeed, hour, link_category, m, minute, monthnum, more, name, nav_menu, nonce, nopaging, offset, order, orderby, p, page, page_id, paged, pagename, pb, perm, post, post__in, post__not_in, post_format, post_mime_type, post_status, post_tag, post_type, posts, posts_per_archive_page, posts_per_page, preview, robots, s, search, second, sentence, showposts, static, subpost, subpost_id, tag, tag__and, tag__in, tag__not_in, tag_id, tag_slug__and, tag_slug__in, taxonomy, tb, term, terms, theme, title, type, w, withcomments, withoutcomments, year

Эти слова не рекомендуется использовать в ключах глобальных переменных $_GET и $_POST . Но что делать, если очень хочется?

Яркий пример, благодаря которому я вообще узнал о наличии таких терминов. Один банк с онлайн-эквайрингом после выполнения операции переадресовывал пользователя на страницу сайта указанную в настройках, добавляя в запрос гет-параметры. Среди всего прочего был вполне безобидный параметр name, который находится в списке выше. Таким образом страница, которая отображается по адресу /success выдавала 404 ошибку с этим параметром - /success/?name=Влад.

Решение банально - "обнулить" эту переменную до того, как с ней начнет работать WordPress.

add_action('init', function() {
    $removeQueryVar = 'name'; // переменная, которую необходимо сросить
    $removeOnPages = ['success', 'error']; // страницы, на которых необходимо сбросить переменную

    if(preg_match('/^\/('.implode('|', $removeOnPages).')\/(.*)/', $_SERVER['REQUEST_URI']) && isset($_GET[$removeQueryVar])) {
        unset($_GET[$removeQueryVar]);
    }
});

В ответ на сообщение

Доступна разметка Markdown. А еще вы можете использовать крутой пак эмоций.

Нажимая на кнопку «Отправить» вы даете свое согласие на обработку персональных данных в соответствии с законом №152-ФЗ «О персональных данных» от 27.07.2006 и принимаете условия Политики конфеденциальности.