вход на сайт

Имя пользователя :
Пароль :

Восстановление пароля Регистрация

Углубленный взгляд на постоянные ссылки WordPress и перезапись URL

  1. Обзор запросов WordPress
  2. Гадкие постоянные ссылки и запросы в WordPress
  3. Красивые постоянные ссылки и структурные теги WordPress
  4. Давайте сделаем их милыми
  5. Резюме

В сегодняшнем посте мы подробно рассмотрим постоянные ссылки WordPress и переписывание URL. Согласно 1999 пост Якоба Нильсена Для работоспособного сайта требуется:

  • доменное имя, которое легко запомнить и легко записать
  • короткие URL
  • простые в вводе URL
  • URL, которые визуализируют структуру сайта
  • URL-адреса, которые можно взломать, чтобы пользователи могли перейти на более высокий уровень информационной архитектуры, взломав конец URL-адреса.
  • постоянные URL, которые не меняются

URL-адрес никогда не должен изменяться, так как он может храниться и передаваться разными способами. Вот почему мы называем их постоянными. Кроме того, URL-адрес должен быть семантическим, в том смысле, что он является непосредственным и интуитивно понятным для неопытных пользователей (подробнее о Семантические URL в википедии).

В статической сети URL-адрес идентифицирует ресурс по его имени, как показано в следующем примере:

http://example.com/path/to/resource/wordpress-permalinks.html

Чтобы иметь хорошо структурированные URL-адреса, нам просто нужна хорошо структурированная файловая система и правильно названные ресурсы.
Но сеть динамична, и мы привыкли управлять веб-сайтами, используя управляемые базой данных CMS, и URL-адреса будут содержать числовые параметры, значения которых определяют запрос, который будет выполняться к базе данных. Рассмотрим следующий пример:

http://example.com/?key1=val1&key2=val2

В этом URL вы заметите разделитель (знак вопроса) и набор пар ключ / значение (разделенных амперсандом), которые составляют строку запроса. URL не соответствует требованиям удобства использования и доступности, как указано выше, и должен быть преобразован в более значимую и удобную для SEO постоянную ссылку.
То, как эти «некрасивые» URL-адреса преобразуются в оптимизированные постоянные ссылки, зависит от вашего веб-сервера. Если вы апаш Пользователь, вам нужно будет добавить набор директив перезаписи в файл .htaccess корневой папки. Если вы пользователь Nginx , вы бы добавили директиву try_files в основной файл конфигурации (подробнее об этом читайте на Блог Nginx ).

Но не волнуйся! В большинстве случаев вам не понадобится построчно настраивать веб-сервер, потому что наиболее популярные CMS позволяют пользователям легко и безопасно управлять структурой постоянных ссылок из серверной части. И WordPress не является исключением. Пользователи с правами администратора смогут быстро и легко устанавливать свои собственные правила перезаписи из панели администратора. Опытные пользователи и разработчики могут получить еще больше благодаря WordPress Rewrite API , который предоставляет функции и ловушки, которые выводят постоянную ссылку на более высокий уровень.

Опытные пользователи и разработчики могут получить еще больше благодаря   WordPress Rewrite API   , который предоставляет функции и ловушки, которые выводят постоянную ссылку на более высокий уровень

Пользователь-администратор может легко проверить свою любимую структуру из настроек

URL-адреса определяют запрос к базе данных. По этой причине нашим первым шагом будет краткое введение в запросы WordPress.

Обзор запросов WordPress

С конкретной целью построения запроса, его выполнения и сохранения результатов из базы данных, WordPress предоставляет Класс WP_Query , Благодаря этому классу нам не нужно заботиться о запросе, потому что WP_Query автоматически обработает запрос, построит запрос и выполнит его. Тогда, согласно иерархия шаблонов WordPress вернет запрошенный ресурс.

Из коробки WordPress принимает запросы для отдельных сообщений, страниц, типов сообщений, а также для ряда архивов, упорядоченных по категориям, тегам, дате, автору и другим. Более того, если функциональности по умолчанию будет недостаточно, разработчики могут создавать собственные запросы, создавая новые экземпляры класса WP_Query (объект запроса) или передавая конкретные параметры существующему экземпляру запроса перед его выполнением.

Параметры запроса называются переменными запроса и делятся на три группы.

Публичные переменные запросов : эти переменные являются публичными в том смысле, что они доступны для использования в публичных запросах (т. Е. URL).
Благодаря этим переменным мы можем запросить посты авторов:

? author = 12? author_name = mickey

По категории или тегу:

? cat = 4,5,6? category_name = CMS? tag = wordpress

По дате и времени:

? monthnum = 201601? year = 2015? w = 13? day = 31

По почте или странице:

? p = 123? name = hello-world? page_id = 234

И многое другое.

Частные переменные запроса : эти переменные не предназначены для добавления в строки запроса URL. Они могут использоваться для воздействия на запросы только внутри скрипта (плагина или файла functions.php темы).

Следующая строка запроса не будет возвращать ожидаемый результат:

? Meta_key = город & meta_value = лондон

meta_key и meta_value являются частными переменными запроса, которые не должны быть определены в строках запроса. Они должны быть переданы экземпляру объекта запроса, как я покажу вам позже.

Увидеть полный список открытых и закрытых переменных запроса в Кодексе.

Пользовательские переменные запроса : эти пользовательские переменные могут быть переданы через строки URL-запроса, так же как и переменные общего запроса. Основное различие между общедоступными и настраиваемыми переменными заключается в том, что WordPress не будет обрабатывать собственные переменные самостоятельно, и мы должны получить их значения из плагина для настройки запросов.

При этом давайте вернемся к постоянным ссылкам.

Гадкие постоянные ссылки и запросы в WordPress

Уродливые Постоянные ссылки показывают строку запроса , то есть часть URL, содержащую набор переменных запроса (строку запроса), которые будут определять возвращаемый ресурс.

Уродливые Постоянные ссылки показывают строку запроса , то есть часть URL, содержащую набор переменных запроса (строку запроса), которые будут определять возвращаемый ресурс

WordPress по умолчанию имеет структуру Ugly Permalinks

В качестве примера рассмотрим следующие URL:

http://example.com/?cat=5 http://example.com/?cat=5,7,9

В ответ на эти URL WordPress возвращает архив сообщений, принадлежащих указанным категориям.
Мы не ограничены одним параметром для каждого URL. В следующих примерах мы создаем более сложные запросы:

? author_name = lucy & category_name = WebDev? tag = wordpress & m = 201606

В первой строке запроса author_name и category_name потребуются все сообщения указанного автора в категории WebDev. Во второй строке запроса tag и m потребуются все сообщения, помеченные как wordpress и опубликованные в июне 2016 года.
Как видите, мы можем установить более одной переменной запроса и заставить WordPress запускать расширенные запросы, просто добавляя соответствующие пары ключ = значение в строки запроса.

Красивые постоянные ссылки и структурные теги WordPress

Включая Pretty Permalinks, мы устанавливаем удобную, доступную и оптимизированную для SEO структуру URL . Давайте сравним следующие URL:

http://example.com/?p=123 http://example.com/wordpress-permalinks/

В этом примере уродливая постоянная ссылка показывает переменную p и ее значение (идентификатор записи), в то время как симпатичный URL показывает слаг после публикации.

WordPress предоставляет четыре формата Pretty Permalink, которые мы можем выбрать на экране настроек Permalink, как показано на рисунке ниже.

постоянные ссылки WordPress по умолчанию

Но мы не ограничены форматами по умолчанию, поскольку WordPress позволяет пользователям настраивать симпатичный постоянный формат, устанавливая один или несколько тегов структуры.

Опция настраиваемой структуры позволяет установить настраиваемый формат постоянной ссылки

Эти теги являются конкретными ключевыми словами, заключенными в символ%. WordPress предоставляет следующие теги:

  • %год%
    Год публикации (четыре цифры)
  • % monthnum%
    Месяц публикации (две цифры)
  • %день%
    День публикации (две цифры)
  • %час%
    Час публикации (две цифры)
  • % мин%
    Минута публикации (две цифры)
  • % второй%
    Вторая публикация (две цифры)
  • % post_id%
    Уникальный идентификатор сообщения (целое число)
  • % postname%
    Слизня поста (то есть очищенная строка, представляющая заголовок поста)
  • % Категория%
    Категория слизняк
  • % автор%
    Автор слизняк

Давайте проверим переключатель «Пользовательская структура» и добавим одну из следующих строк в текстовое поле:

/% author% /% postname% / /% year% /% postname% / /% category% /% postname% /

Любая из этих строк генерирует отличную постоянную ссылку с определенными семантическими значениями, как показано ниже:

http://example.com/mickey/wordpress-permalinks/ http://example.com/2016/wordpress-permalinks/ http://example.com/CMS/wordpress-permalinks/

В первом примере результирующий URL выделяет авторов постов. Два других формата указывают соответственно год публикации и категорию сообщения. Вам решать, какой формат подходит вам больше всего.

В дополнение к общедоступным и частным переменным запросов WordPress позволяет разработчикам и опытным пользователям определять свои собственные пользовательские переменные запросов. После регистрации эти переменные могут быть добавлены в строки запроса, как и публичные переменные запросов, и их значения также могут использоваться для воздействия на запросы.

Теперь я покажу вам, как создать собственный мета-запрос (т. Е. Запрос, который извлекает сообщения по настраиваемому полю), используя преимущества пользовательских запросов.
Для достижения этой цели мы разработаем плагин для регистрации пользовательских переменных, получения их значений и изменения запроса соответствующим образом.

В основной файл плагина добавьте следующий код:

/ ** * Регистрация пользовательских запросов vars * * @param array $ vars Массив доступных переменных запроса * / function myplugin_register_query_vars ($ vars) {$ vars [] = 'city'; вернуть $ vars; } add_filter ('query_vars', 'myplugin_register_query_vars'); / ** * Создание пользовательского запроса * * @param $ query obj Экземпляр WP_Query (передается по ссылке) * * / function myplugin_pre_get_posts ($ query) {// проверка, запрашивает ли пользователь страницу администратора // или текущий запрос не основной запрос if (is_admin () ||! $ query-> is_main_query ()) {return; } $ city = get_query_var ('city'); // добавляем элементы meta_query if (! empty ($ city)) {$ query-> set ('meta_key', 'city'); $ query-> set ('meta_value', $ city); $ query-> set ('meta_compare', 'LIKE'); }} add_action ('pre_get_posts', 'myplugin_pre_get_posts', 1);

Давайте рассмотрим этот код. Сначала мы зарегистрировали запрос var с именем city:

function myplugin_register_query_vars ($ vars) {$ vars [] = 'city'; вернуть $ vars; } add_filter ('query_vars', 'myplugin_register_query_vars');

фильтр query_vars позволяет добавлять, удалять или изменять публичные переменные запроса перед выполнением запроса. Функция обратного вызова в этом примере сохраняет в качестве аргумента массив доступных переменных, добавляет новую переменную и возвращает тот же массив.
Далее мы использовали значение переменной для изменения запроса:

function myplugin_pre_get_posts ($ query) {// проверяет, запрашивает ли пользователь страницу администратора // или текущий запрос не является основным запросом if (is_admin () ||! $ query-> is_main_query ()) {return; } $ city = get_query_var ('city'); // добавляем элементы meta_query if (! empty ($ city)) {$ query-> set ('meta_key', 'city'); $ query-> set ('meta_value', $ city); $ query-> set ('meta_compare', 'LIKE'); }} add_action ('pre_get_posts', 'myplugin_pre_get_posts', 1);

хук действия pre_get_posts запускается после создания запроса, но до его выполнения. Таким образом, мы можем подключить функцию обратного вызова к этому действию, чтобы внести изменения в запрос до его выполнения. Вот что происходит:

  1. Функция обратного вызова хранит экземпляр объекта $ query, который передается по ссылке, а не по значению. Это означает, что любые изменения в объекте запроса влияют на исходный запрос, а не на его копию. По этой причине мы должны быть уверены, какой запрос будет выполнен (основной запрос).
  2. Позже мы получаем значение города из текущей строки запроса благодаря функция get_query_var ,
  3. Наконец, если $ city не пуст, мы можем установить элементы мета-запроса meta_key, meta_value и meta_compare. Последние являются частными переменными запросов, недоступными для публичных запросов. Их значения могут быть установлены только из скрипта.

Теперь активируйте плагин, добавьте пользовательское поле города к количеству сообщений и проверьте URL-адреса, как показано ниже:

http://example.com/?city=London

В ответ на этот запрос WordPress вернет все сообщения, в которых значение поля города равно Лондону.

Давайте сделаем их милыми

Наша последняя задача - преобразовать некрасивый URL приведенного выше примера в довольно постоянную структуру. Давайте добавим следующую функцию в наш плагин:

/ ** * Добавить теги и правила для перезаписи * / function myplugin_rewrite_tag_rule () {add_rewrite_tag ('% city%', '([^ &] +)'); add_rewrite_rule ('^ city / ([^ /] *) /?', 'index.php? city = $ match [1]', 'top'); } add_action ('init', 'myplugin_rewrite_tag_rule', 10, 0);

add_rewrite_tag а также add_rewrite_rule функции являются частью API Rewrite. add_rewrite_tag делает WordPress осведомленным о запросе города var, тогда как add_rewrite_rule определяет новое правило перезаписи. Обе функции должны быть подключены к действию init. Благодаря новому тегу и правилу мы можем отправить следующий URL:

http://example.com/city/London/

WordPress вернет архив сообщений, где значение пользовательского поля города - Лондон.

Примечание: каждый раз, когда добавляется новое правило перезаписи, постоянные ссылки WordPress должны обновляться с экрана постоянных ссылок в меню настроек администратора.

Резюме

WordPress предоставляет полноценную систему для управления постоянными ссылками. Большинство функций доступны из коробки, и доступны из панели администратора. Но если бы нам потребовался более глубокий контроль над постоянными ссылками, целый набор хуков и функций позволяет нам добавлять переменные в строки запроса и переписывать URL-адреса в доступные и дружественные для SEO постоянные ссылки WordPress.

Полный код этого поста доступен на Gist.

Com/?
Author = 12?
Cat = 4,5,6?
Category_name = CMS?
Monthnum = 201601?
Year = 2015?
W = 13?
P = 123?
Name = hello-world?
Com/?
Поиск по сайту
Меню
Реклама на сайте
Архив новостей
Реклама на сайте

Реклама на сайте







Архив сайта
Информация
www.home-4-homo.ru © 2016 Copyright. Все права защищены.

Копирование материалов допускается только с указанием ссылки на сайт.