TechBlogSD - Все для WordPress и WEB разработки
WEB и WordPress инструкции, новости, обзоры тем и плагинов

API перезаписи WordPress

48

В WordPress есть действительно полезный API, называемый «API перезаписи ». Я предполагаю, что уже есть «переписывание URL-адресов», это процесс, который делает URL-адреса более читабельными. Например, такой URL-адрес http://mysite.com/?page=12&category=12&author=47 выглядит не очень хорошо. Его сложно запомнить, да и поисковикам это не очень нравится. Вот почему почти в каждой CMS есть встроенная функция, которая «переписывает» URL-адреса, чтобы они выглядели так: http://mysite.com/category/business/finance.

API перезаписи и класс WP_Rewrite

Внутри WordPress этот процесс также известен как структура постоянных ссылок. Когда вы переключаетесь со структуры постоянных ссылок по умолчанию на настраиваемую структуру, вы автоматически активируете API перезаписи. Это полностью автоматически. Но иногда вам нужно создать свои собственные правила перезаписи.

В этом посте мы собираемся создать простые функции для создания простого настраиваемого правила перезаписи. Допустим, мы хотим получить значение реферера, что-то вроде эквивалента $ _GET [‘referrer’].

Если мы посмотрим на Кодекс, то увидим на странице перезаписи API, что этот API имеет 6 встроенных функций. Наиболее распространенное использование перезаписи – использование этих функций, по этому поводу есть множество руководств, поэтому я собираюсь использовать фильтры вместо функций. Потому что да, API перезаписи также можно использовать с фильтрами! Эти фильтры перечислены на странице Кодекса класса WP_Rewrite.

Добавление новой переменной запроса

Для начала нам нужно создать функцию, которая сообщит WordPress, что установлено новое правило перезаписи. Это задача функций add_rewrite_rule() и add_rewrite_tag (), но вы также можете сделать это с помощью фильтров query_vars и rewrite_rules_array. Для этого нам нужно создать две функции и два фильтра. Первая функция просто добавляет новую переменную в фильтр query_vars, а вторая регистрирует эту новую переменную в глобальных правилах перезаписи:

/* |-------------------------------------------------------------------------- | Start Rewrite. Sample: http://mysite.com/referrer/remi |-------------------------------------------------------------------------- */ // Register a new var function rc_add_query_vars( $vars) { $vars[] = "referrer"; // name of the var as seen in the URL return $vars; } // Hook our function into query_vars add_filter('query_vars', 'rc_add_query_vars'); // Add the new rewrite rule to existings ones function rc_add_rewrite_rules($rules) { $new_rules = array('referrer/([^/]+)/?$' => 'index.php?referrer=$matches[1]'); $rules = $new_rules + $rules; return $rules; } // Hook the function into rewrite_rules_array add_filter('rewrite_rules_array', 'rc_add_rewrite_rules');

После того, как вы добавите этот код в любой файл плагина или файл functions.php темы, перейдите в Настройки> Постоянные ссылки и сохраните структуру постоянных ссылок. Это действие необходимо. Теперь у вас должна быть возможность получить доступ к своему сайту с помощью этого типа или URL: http://mysite.com/referrer/your-name. Если вы хотите, чтобы вас перенаправляли на определенную страницу, измените index.php? Referrer = $ matches [1] на index.php? Pagename = my-page & referrer = $ matches [1], где «my-page» – это страница, которую нужно перенаправлен на slug.

Получение значения переменной

Теперь, когда ваше правило перезаписи установлено, вы можете захотеть получить доступ к значению переменной. Но если вы выполните простой $ _GET [‘referrer’], вы не получите никакого значения. Чтобы получить значения переменных URL, вам необходимо привязать функцию к фильтру template_redirect. Подключаться к фильтру «init» слишком рано. Затем вы можете получить доступ к нужным переменным через объект $ wp_query. Вот краткий пример того, как это сделать:

// Retrieve URL var function rc_get_my_vars() { global $wp_query; if(isset($wp_query->query_vars['referrer'])) { $referrer = get_query_var('referrer'); } } // Hook the function into template_redirect add_action( 'template_redirect', 'rc_get_my_vars');

Затем вы можете повторить значение $ referrer или использовать его, как это было бы с обычной переменной GET.

Конечно, вы можете изменить использование более одной переменной:

// in rc_add_query_vars() $vars[] = "referrer"; $vars[] = "campaign"; // in rc_add_rewrite_rules() $new_rules = array('referrer/([^/]+)/([^/]+)/?$' => 'index.php?pagename=my-page&referrer=$matches[1]&campaign=$matches[2]');

Не забывайте, что вам нужен модуль PHP mod_rewrite, позволяющий использовать перезапись URL.

Источник записи: https://www.wpexplorer.com

Leave A Reply

Этот веб-сайт использует файлы cookie для улучшения вашего опыта. Мы предполагаем, что вы согласны с этим, но вы можете отказаться, если хотите. ПринимаюПодробнее