Отключить ТОЛЬКО URL автозаполнение, а не всю каноническую систему URL


8

У меня есть блог с несколькими страницами в некоторых категориях "проектов", которые структурированы / названы так:

  • / Проекты / Проект-2012
  • / Проекты / Проект-2013
  • / Проекты / Проект-2014
  • / Проекты / Проект-2015

Когда пользователь вводит URL-адреса, такие как http://myblog.com/project или даже http://myblog.com/proje, он / она перенаправляется на страницу / projects / project-2012 . (С 301 переехал навсегда!)

Хотя я хочу, чтобы WordPress превращал URL-адреса, приводящие к одной четко определенной странице (например, http://myblog.com/?p=123 ), в каноническую форму, я хочу отключить только автозаполнение URL-адресов для «неясных» URL-адресов, которые может указывать на несколько страниц.

Мой вопрос: как я могу это сделать?


Я также провел некоторые исследования ...

  • Принятый ответ на вопрос Отключить автозаполнение Wordpress отключает всю каноническую систему URL. Это не приемлемо для меня.

  • Около четырех лет назад что-то подобное появилось на трекере ошибок Wordpress: https://core.trac.wordpress.org/ticket/8948 Хотя некоторые хорошие решения (например, предлагают страницу «Мы не нашли ваш URL. Но были ли вы Может быть, вы ищете одну из следующих страниц? ») там обсуждали, билет был закрыт в конце.

  • РЕДАКТИРОВАТЬ: Есть на самом деле новый билет на https://core.trac.wordpress.org/ticket/16557, который покрывает именно то, что мне нужно. Кажется, он предназначен для выпуска 4.0. И в комментариях к заявке также содержится решение (см. Ниже).


эта основная функция угадывания URL также портится с SEO и SEO инструментами!
Мау

Ответы:


11

Хорошо, после поиска немного больше, я наконец нашел ответ на свой вопрос, спрятанный в комментарии к этой заявке: https://core.trac.wordpress.org/ticket/16557 Пользователь nacin предложил использовать этот код:

function remove_redirect_guess_404_permalink( $redirect_url ) {
    if ( is_404() )
        return false;
    return $redirect_url;
}

add_filter( 'redirect_canonical', 'remove_redirect_guess_404_permalink' );

Если вы добавите это в новый php-файл плагина (например, в wp-content / plugins / disable-url-autocorrect-guessing.php), у вас будет хороший плагин, который вы можете активировать, чтобы отключить функцию автозамены Wordpress «угадывать». ,

Чтобы избавить вас от неприятностей, я сделал это и передал свой плагин на Wordpress.org. После того, как он будет просмотрен там, вы сможете скачать его здесь: https://wordpress.org/plugins/disable-url-autocorrect-guessing/


Хотя это и является рабочим решением, предлагаемый код является своего рода хаком. Как только запрос функции в https://core.trac.wordpress.org/ticket/16557 будет фактически реализован, появятся лучшие решения для этого, а также гораздо лучший контроль над тем, как на самом деле должно выполняться угадывание.


Жаль, что я не смогу проголосовать трижды ...
KalenGi

Вдохновил меня, когда у меня возникли проблемы с перенаправлением страниц. Я планировал remove_filter(). Но сейчас обходит только конкретный случай, когда у меня возникают проблемы. На всякий случай, если кто-то заинтересован в моей проблеме: wordpress.stackexchange.com/questions/307670/…
Parixit

больше не работает в v5 +
nodws

@nodws: О чем ты говоришь? Я использую свой плагин с фрагментом кода на 5.2.2, и он все еще работает нормально.
Хауке П.

О, это был конфликт с редиректами
YOAST

0

К сожалению redirect_canonical(), 400+ строк кода (и продолжает расти от выпуска к выпуску), который не особенно структурирован, чтобы контролироваться по назначению. Это все или ничего, что не может быть гибко настроено.

С практической точки зрения ваши лучшие варианты:

  1. Обработка перенаправления вручную, при template_redirect.
  2. Предотвращать перенаправление как redirect_canonicalхук, если цель, которую он придумал, не желательно.

В любом случае вам придется выработать логику того, что именно делает нежелательное перенаправление.


Да, это неожиданно очень неудачно. :-( Мое определение нежелательного перенаправления довольно простое: каждый URL, который не может быть разрешен только для одной цели (но несколько или ни одного), нежелателен и должен привести к 404.
Хауке П.

@HaukeP. логика, ответственная за это, является частью, redirect_guess_404_permalink()и она не делает такого различия, просто берет первое совпадение, которое производит SQL :(
Rarst

На самом деле я нашел решение самостоятельно: wordpress.stackexchange.com/a/144970/51898
Hauke ​​P.

@HaukeP. Я немного неправильно понял вас о «ровно одной цели», потому что некоторые случаи нечеткого соответствия технически разрешат только одно совпадение, но это не то же самое, что избавиться от нечетких вещей вообще :)
Rarst

Да, на самом деле, когда я писал свой последний комментарий, я на секунду остановился, чтобы снова задуматься, опасаясь, что меня неправильно поймут. :) Так что, похоже, я должен был написать свой комментарий (и вопрос) более точно.
Хауке П.
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.