Войти как пользователь
Вы можете войти на сайт, если вы зарегистрированы на одном из этих сервисов:
< >
1 2 3 4 5

Переписывание URL-адресов в WordPress: советы и плагины

  1. Понимание WP_Rewrite
  2. Содержимое $ wp_rewrite-> rules
  3. Установка пользовательских постоянных ссылок
  4. Восстановление Авторской Базы
  5. Автор базы с использованием generate_rewrite_rules
  6. Сброс правил переписывания
  7. Использование не-WP правил
  8. Маскировка ваших файлов тем
  9. Полезные инструменты и плагины
  10. Monkeyman Rewrite Analyzer
  11. AskApache RewriteRules Viewer
  12. WP htaccess Control
  13. Переписать тестер правил
  14. DW ReWrite
  15. Заключение

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

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

Рекомендуемое чтение: 29 настроек WordPress для улучшения сообщений и страниц

Понимание WP_Rewrite

Если вы вообще знакомы с mod_rewrite на серверах Apache, вы поймете синтаксис переписывания WordPress. Их система по-прежнему построена поверх файла .htaccess , но все правила написаны на PHP. Это на самом деле делает процесс немного проще, так как мы имеем больше контроля над написанием наших собственных URL-адресов.

Я рекомендую снимать Страница класса $ wp_rewrite поскольку у этого есть тонны информации на предмете. Есть даже небольшие примеры, на которые мы можем ссылаться, чтобы все было легче понять. Большая часть кода может быть записана непосредственно в файл functions.php вашей темы. Давайте начнем с рассмотрения переписок по умолчанию, уже включенных в WordPress.

Содержимое $ wp_rewrite-> rules

Объявив класс $ wp_rewrite как глобальный, мы получаем доступ ко всем внутренним данным. Когда вы добавляете свои собственные правила, они добавляются в массив с именем $ wp_rewrite-> rules. Важно запомнить эту переменную, так как вам, вероятно, придется ссылаться на данные много раз во время разработки.

&lt;div> <code> <? php global $ wp_rewrite; print_r ($ wp_rewrite-> правила); ?> </ code> </ div>

Я добавил этот блок кода в файл page.php моей темы. Он выведет большой массив данных, который выглядит как большой беспорядок. Но если вы просматриваете источник на своей странице, на самом деле легко увидеть, какие правила перезаписи соответствуют какому имени файла. Например, давайте посмотрим на правила для переписывания категории:

[category /(.+?)/?$] => index.php? category_name = $ соответствует [1]

Бит слева в скобках - это наш Apache RewriteRule, который нужно искать. Начиная с раздела / категории /, за которым следует любая строка символов. Если это соответствует, то сервер знает, что нужно ссылаться на index.php? Category_name = при замене переменной в конце.

Установка пользовательских постоянных ссылок

В одном только классе $ wp_rewrite можно найти так много контента. Можно ссылаться на многие другие свойства, такие как $ wp_rewrite-> category_base или $ wp_rewrite-> author_base для извлечения структур URL по умолчанию для этих страниц. Но помимо изменения настроек WP по умолчанию мы также можем создавать свои собственные правила.

Восстановление Авторской Базы

Когда вы заходите на страницу настроек Постоянных ссылок, у вас есть возможность сброса категорий и тегов баз. Однако опция сброса базы ваших авторов, как ни странно, отсутствует.

Но мы можем использовать add_rewrite_rule () из кодекса WordPress для интеграции некоторых новых настроек. В этом случае я заменил / author / на / writer /, но вы можете использовать любую базу, какую захотите. Кроме того, я скопировал некоторые другие перенаправления для страниц автора и RSS-каналов. Вы можете добавить этот блок кода в файл functions.php вашей темы.

add_action ('init', 'add_author_rules'); function add_author_rules () {add_rewrite_rule ("writer / ([^ /] +) /?", "index.php? author_name = $ match [1]", "top"); add_rewrite_rule ("writer / ([^ /] +) / page /? ([0-9] {1,}) /?", "index.php? author_name = $ совпадений [1] & paged = $ совпадений [2] ", "Топ"); add_rewrite_rule ("writer / ([^ /] +) / (feed | rdf | rss | rss2 | atom) /?", "index.php? author_name = $ совпадений [1] & feed = $ match [2]", " Топ"); add_rewrite_rule ("writer / ([^ /] +) / feed / (feed | rdf | rss | rss2 | atom) /?", "index.php? author_name = $ совпадений [1] & feed = $ совпадений [2]" , "Топ"); }

Эта функция доступна даже без использования переменной $ wp_rewrite. Некоторым разработчикам нравится этот метод, потому что он проще, чем жесткое программирование со свойствами класса. Однако я также заметил, что этот метод не всегда надежен для некоторых установок WordPress. На самом деле есть второй вариант, чтобы добавить эти правила в ловушку после сброса вашего .htaccess (см. Ниже).

Автор базы с использованием generate_rewrite_rules

Для написания этого метода нам снова понадобится глобальный класс $ wp_rewrite. Затем я установил новую переменную с именем $ new_rules, которая содержит ассоциативный массив данных. Мой пример кода ниже просто переписывает для основного раздела страницы автора.

function generate_author_rewrite_rules () {global $ wp_rewrite; $ new_rules = array ("writer / ([^ /] +) /?" => "index.php? author_name =". $ wp_rewrite-> preg_index (1)); $ wp_rewrite-> rules = $ new_rules + $ wp_rewrite-> rules; }

Но если мы хотим включить несколько страниц и RSS-каналы, мы можем увеличить массив. У вас есть возможность создать функцию PHP для толкать ассоциативный массив данных что может быть слишком сложным. Мы также можем разделить блоки данных через запятые, ведя себя как отдельные объекты в массиве. Проверьте мой обновленный код, снова написанный в файле темы functions.php.

function generate_author_rewrite_rules () {global $ wp_rewrite; $ new_rules = array ("writer / ([^ /] +) /?" => "index.php? author_name =". $ wp_rewrite-> preg_index (1), "writer / ([^ /] +) / page /? ([0-9] {1,}) /? "=>" Index.php? Author_name = ". $ Wp_rewrite-> preg_index (1)." & Paged = ". $ Wp_rewrite-> preg_index (2), "writer / ([^ /] +) / (feed | rdf | rss | rss2 | atom) /?" => "index.php? author_name =". $ wp_rewrite-> preg_index (1). "& feed =". $ wp_rewrite-> preg_index (2), "writer / ([^ /] +) / feed / (feed | rdf | rss | rss2 | atom) /?" => "index.php? author_name =". $ wp_rewrite- > preg_index (1). "& feed =". $ wp_rewrite-> preg_index (2)); $ wp_rewrite-> rules = $ new_rules + $ wp_rewrite-> rules; }

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

Сброс правил переписывания

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

Лучшим способом является доступ к странице постоянных ссылок в панели администратора и повторное сохранение изменений. Это всегда называет flush_rewrite_rules поэтому вам никогда не придется беспокоиться о пользователях, испытывающих проблемы с загрузкой. И это займет всего один раз, чтобы заново сохранить страницу и обновить все правила в вашей системе. Но если это не сработает, вы можете попробовать вызвать $ wp_rewrite-> flush_rules ();

Использование не-WP правил

Внутри класса $ wp_rewrite у нас есть доступ к десяткам свойств. Одним из наиболее важных параметров является $ wp_rewrite-> non_wp_rules, который собирает массив перенаправлений, которые не попадают в файл index.php.

На самом деле это чаще всего используется при разработке плагинов WordPress. Вы можете вставить определенный пользовательский тип URL (например, / calendar / june-2012 /) в бэкэнд вашего сайта (/wp-content/plugins/calendarplug/myscript.php). Но, конечно, есть и другие варианты использования этого ассоциативного массива пользовательских правил перезаписи, помимо плагинов. Я привел отличный пример в контексте ниже.

Маскировка ваших файлов тем

Это общее предложение, которое я часто вижу на форумах WordPress. В идеале мы хотели бы сослаться на некоторые файлы в папке / wp-content / themes / mytheme / с более элегантным URL. Обратите внимание, что для изменения структуры каталогов потребуется другой набор переписок WordPress.

Внутренняя система переписывания WordPress всегда выдвигает контент к одному файлу маршрутизации. В случае по умолчанию мы используем index.php вместе с любыми дополнительными данными строки запроса. Но для сокрытия нашего стандартного каталога шаблонов (/ wp-content / themes / mytheme / *) нам потребуется отобразить много разных файлов.

add_action ('generate_rewrite_rules', 'themes_dir_add_rewrites'); function themes_dir_add_rewrites () {$ theme_name = next (explode ('/ themes /', get_stylesheet_directory ())); global $ wp_rewrite; $ new_non_wp_rules = array ('css /(.*)' => 'wp-content / themes /'. $ theme_name. '/ css / $ 1', 'js /(.*)' => 'wp-content / themes / '. $ theme_name.' / js / $ 1 ',' images / wordpress-urls-rewrite /(.*) '=>' wp-content / themes / '. $ theme_name.' / images / wordpress-urls-rewrite / $ 1 ',); $ wp_rewrite-> non_wp_rules + = $ new_non_wp_rules; }

Я написал новую функцию themes_dir_add_rewrites (), чтобы извлечь весь основной контент из этих длинных URL-адресов и перенаправить их в бэкэнд. Обратите внимание, что мы используем это другое загадочное свойство класса $ wp_rewrite с именем non_wp_rules. Согласно документам, это правила, которые не относятся к файлу index.php в WP и будут обрабатываться на стороне сервера.

Что такого замечательного в этих не-WP правилах, так это то, что вы все еще можете довольно легко управлять старым методом URL. Ничто не мешает вам ссылаться на:

/wp-content/themes/mytheme/images/wordpress-urls-rewrite/logo.jpg.

Но это выглядит намного лучше, если вы можете сослаться на:

/images/wordpress-urls-rewrite/logo.jpg вместо этого.

Полезные инструменты и плагины

Есть только несколько инструментов, которые вы можете использовать, если вы застряли в кодировании своих собственных красивых URL. Процесс очень труден для понимания, поэтому не расстраивайтесь, если вы боретесь в течение пары недель. Я чувствую, что содержание станет легче, если вы будете проводить больше времени на практике.

Но для начала ознакомьтесь с некоторыми из этих удобных инструментов и плагинов для переписывания. Вам, вероятно, не понадобятся все из них, но замечательно, что такая большая база разработчиков работает над переписыванием WP.

Monkeyman Rewrite Analyzer

При первом вступлении в правила переписывания этот плагин является обязательным. На самом деле он не меняет никаких правил для вашего сайта - он просто позволяет вам протестировать код и посмотреть, какие перенаправления переходят на какие страницы. Он даже будет работать для тестирования пользовательских переменных запроса для любых пользовательских типов записей.

AskApache RewriteRules Viewer

Это похоже на плагин выше, за исключением того, что оно не позволяет вам проверять свои собственные правила. Вместо этого этот плагин будет отображать все правила WP вашего сайта по умолчанию и куда они перенаправляются. Это будет включать все основные свойства $ wp_rewrite, такие как настройки вашей постоянной ссылки и базы страниц / категорий / тегов.

WP htaccess Control

Здесь у вас есть другой набор правил для создания перенаправлений новой страницы. Плагин имеет собственную админ-панель, где вы можете редактировать переменные, такие как база авторов, базы страниц и даже добавлять свои собственные правила .htaccess.

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

Переписать тестер правил

На самом деле это не плагин WordPress, но, безусловно, это один из удобных инструментов для хранения файлов. Вы можете переписать правила перезаписи и протестировать их на своем сайте, даже не редактируя файл .htaccess. Это идеальный метод для удаления ошибок из вашего синтаксиса перед запуском в реальном времени в Интернете.

DW ReWrite

DW Rewrite - очень простой плагин, который сразу после установки создает 3 уникальных красивых URL. По умолчанию он изменит ссылки администратора, входа в систему и регистрации на / admin, / login и / register соответственно.

Это может быть здорово, если вам нужно быстрое исправление для блога, в котором есть несколько авторов. Он будет специально скрывать запутанную регистрационную ссылку WordPress (/wp-login.php?action=register).

Заключение

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

Если у вас возникли проблемы с правилами переписывания, вам никогда не будет трудно исправить ущерб. Просто удалив код функции и очистив ваши .htaccess правила, вы увидите, что ничего не изменилось. Обязательно ознакомьтесь с некоторыми другими подобными статьями, которые вы можете найти по этой теме. И если у вас есть какие-либо вопросы или комментарии, вы можете поделиться ими с нами в разделе пост-обсуждения.

Lt;div> <code> <?
Php global $ wp_rewrite; print_r ($ wp_rewrite-> правила); ?
Php?
Php?
Add_action ('init', 'add_author_rules'); function add_author_rules () {add_rewrite_rule ("writer / ([^ /] +) /?
Php?
Author_name = $ match [1]", "top"); add_rewrite_rule ("writer / ([^ /] +) / page /?
Php?
Author_name = $ совпадений [1] & paged = $ совпадений [2] ", "Топ"); add_rewrite_rule ("writer / ([^ /] +) / (feed | rdf | rss | rss2 | atom) /?
Php?