URL, не использующий строку запроса, больше не работает.

Вопрос или проблема

У меня есть несколько веб-сайтов, на которых я написал пользовательскую функцию для получения данных из базы данных, это все старые сайты. Страница получает информацию, захватывая последнюю часть 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. Давайте рассмотрим, как работает этот код:

  1. add_action( ‘init’, ‘add_mypage_rule’ ): Эта строка связывает функцию add_mypage_rule с хуком init, который вызывается в начале загрузки WordPress. Это гарантирует, что ваше правило будет установлено до того, как WordPress начнет обрабатывать запросы.

  2. add_rewrite_rule: Этот метод определяет, как URL будет сопоставляться с определенной страницей. В данный момент мы указываем, что любой URL, начинающийся с item/ и за которым следует идентификатор (например, 12345), должен обрабатываться страницей с названием item. В результате пользователи смогут по-прежнему обращаться к example.com/item/12345/, и запрос будет правильно обрабатываться вашей страницей.

Применение изменений

После добавления этого кода вам нужно:

  1. Сохранить настройки постоянных ссылок: Перейдите в настройки постоянных ссылок в админке WordPress и просто нажмите "Сохранить изменения". Это заставит WordPress обновить свои правила маршрутизации.

  2. Проверить результаты: Убедитесь, что при обращении к адресам вида example.com/item/12345/ все работает как ожидалось и данные извлекаются корректно.

Заключение

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

Если возникнут дополнительные вопросы или потребуется помощь в дальнейших изменениях, не стесняйтесь обратиться за консультацией.

Оцените материал
Добавить комментарий

Капча загружается...