Вопрос или проблема
У меня есть несколько веб-сайтов, на которых я написал пользовательскую функцию для получения данных из базы данных, это все старые сайты. Страница получает информацию, захватывая последнюю часть URL и превращая ее в переменную ‘item’
example.com/item/12345/
Это раньше работало, но теперь больше не работает. Что-то обрезает последнюю часть URL, и теперь загружается только example.com/item/
Обходной путь, заключающийся в изменении URL на
example.com/item/?item=12345
«исправил» это, но мне бы хотелось использовать другой URL. Может кто-то прояснить, что здесь произошло? Я полагаю, это произошло после обновления WordPress несколько версий назад.
** редактирование для добавления кода **
Это в файле header.php темы
Я использую плагин Pods для создания пользовательских таблиц, так что я использую его функции запросов к базе данных
$itemURL = 'https://'.$_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
$bits = explode("item/",$itemURL);
$showItem = rtrim($bits[1],"/");
$customPod = pods('custom_jewellery');
$params = array('where' => 'id = "'.$showItem.'"');
$customPod->find($params);
while($customPod->fetch()):
$customItem['id'] = $customPod->field('id');
endwhile;
Я так и не узнал, почему это сломалось в первую очередь, но я нашел решение, которое заставляет правильный URL работать
add_action( 'init', 'add_mypage_rule' );
function add_mypage_rule(){
add_rewrite_rule('^item/([^/]*)/?','index.php?pagename=item','top');
}
Оно было выяснено отсюда:
https://stackoverflow.com/questions/18713230/wordpress-url-rewriting-parameters-in-url
Ответ или решение
К сожалению, старый метод получения данных через URL без использования строки запроса перестал работать, и это повлияло на различные обращения страничек вашего сайта. Давайте разберем, что могло произойти, и как это можно исправить.
Проблема и её причина
Ваша проблема заключается в том, что URL с форматом example.com/item/12345/
не обрабатывается должным образом, и вы получаете только example.com/item/
. Это может быть связано с изменениями в системе маршрутизации WordPress, которые могли происходить в ходе недавних обновлений. Важно отметить, что WordPress использует "переписывание URL" (rewrite rules) для обработки пользовательских структур URL, и изменения в этих правилах могут привести к неожиданным последствиям.
Решение с использованием переписывания URL
Вы уже нашли решение, добавив новое правило переопределения. Давайте подробнее разберем ваш код:
add_action( 'init', 'add_mypage_rule' );
function add_mypage_rule(){
add_rewrite_rule('^item/([^/]*)/?','index.php?pagename=item','top');
}
Эта функция добавляет правило маршрутизации, которое позволяет WordPress правильно обрабатывать URL. Давайте рассмотрим, как работает этот код:
-
add_action( ‘init’, ‘add_mypage_rule’ ): Эта строка связывает функцию
add_mypage_rule
с хукомinit
, который вызывается в начале загрузки WordPress. Это гарантирует, что ваше правило будет установлено до того, как WordPress начнет обрабатывать запросы. -
add_rewrite_rule: Этот метод определяет, как URL будет сопоставляться с определенной страницей. В данный момент мы указываем, что любой URL, начинающийся с
item/
и за которым следует идентификатор (например,12345
), должен обрабатываться страницей с названиемitem
. В результате пользователи смогут по-прежнему обращаться кexample.com/item/12345/
, и запрос будет правильно обрабатываться вашей страницей.
Применение изменений
После добавления этого кода вам нужно:
-
Сохранить настройки постоянных ссылок: Перейдите в настройки постоянных ссылок в админке WordPress и просто нажмите "Сохранить изменения". Это заставит WordPress обновить свои правила маршрутизации.
-
Проверить результаты: Убедитесь, что при обращении к адресам вида
example.com/item/12345/
все работает как ожидалось и данные извлекаются корректно.
Заключение
Проблемы с обработкой URL могут возникать по разным причинам, особенно после обновлений системы. Однако с помощью правил переписывания адресов можно легко адаптироваться к изменениям и восстановить прежнюю функциональность. Ваше решение является эффективным и позволяет минимизировать влияние обновлений на пользовательные URL.
Если возникнут дополнительные вопросы или потребуется помощь в дальнейших изменениях, не стесняйтесь обратиться за консультацией.