Как исправить ссылку?

Ссылка скопирована
1 ответ

В разделе (Projects) есть список статей: кликаешь на статью - в этой же вкладке открывается соответствующая статья.
Все ссылки на статьи имеют вид
test.ru/statya
и только одна из них почему-то имеет вид
test.ru/projects/statya, хотя вложенность такая же, как у остальных.
В чем здесь может быть дело?

РЕШЕНО: оказывается, в админке у этой статьи в поле "Ссылка на карточку проекта" нужно в начале поставить слэш.

Дополнительные вопросы

rinatoptimus @rinatoptimus Автор вопроса оказывается, в админке у этой статьи в поле "Ссылка на карточку проекта" нужно в начале поставить слэш. Ответы на вопрос 0

Нужно решить такую задачу?

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

Заказать помощь
Лучший ответ
1
Игорь Волков Ответ

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

Разница между двумя вариантами важная:

  • /statya — абсолютный путь от корня сайта;
  • statya — относительный путь от текущего раздела, поэтому на странице /projects/ он превращается в /projects/statya.

То есть если в поле «Ссылка на карточку проекта» поставить statya, браузер будет считать ссылку относительной. Если поставить /statya, ссылка пойдёт от корня домена.

Проверка простая:

  1. Откройте редактирование проблемной карточки/проекта.
  2. Найдите поле, из которого берётся ссылка.
  3. Сравните значение с рабочими карточками.
  4. Если у рабочих стоит путь со слэшем в начале, приведите проблемный элемент к тому же виду.
  5. Очистите кэш страницы и проверьте HTML ссылки через инспектор.

Если это правится кодом шаблона, лучше нормализовать ссылку перед выводом:

$url = trim((string) $url);
if ($url !== '' && ! preg_match('~^https?://~i', $url)) {
    $url = '/' . ltrim($url, '/');
}
echo esc_url($url);

$url = trim((string) $url); if ($url !== '' && ! preg_match('~^https?://~i', $url)) { $url = '/' . ltrim($url, '/'); } echo esc_url($url);

Так вы защититесь от повторения ошибки: даже если редактор введёт statya, на фронте получится корректный путь /statya. Но если ссылка может быть внешней, обязательно оставьте проверку на http:// и https://, чтобы не превратить внешний URL в локальный.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно