wp_old_slug_redirect()
Функція ядра, яка перенаправляє користувача зі старих посилань на актуальну.
Функція працює лише з плоскими (не деревоподібними) типами записів.
Функція спрацьовує на хуку template_redirect :
add_action( 'template_redirect', 'wp_old_slug_redirect');
Цю функцію не потрібно використовувати будь-де, вона використовується в ядрі автоматично.
Щоб показати як працює функція розглянемо приклад:
Допустимо у нас був запис із заголовком “Привіт” та посиланням example.com/привет
. Ми змінили ярлик (slug) запису та посилання стало example.com/privet
. При цьому під час зміни ярлика WP автоматично зберіг старий ярлик у метаполі _wp_old_slug
– туди записалося %d0%bf%d1%80%d0%b8%d0%b2%d0%b5%d1%82
слово “привіт” оброблене urlencode() .
Тепер, якщо зайти на стару адресу example.com/привет
, то перш, ніж показати користувачу 404 помилку, WP викликає wp_old_slug_redirect() , яка за допомогою функцій _find_post_by_old_date() намагається знайти ID запису, у якої раніше був запитаний пошук по метаполі _wp_old_slug
або _wp_old_date
). Якщо запис вдається знайти, то функція перенаправляє на нову адресу з 301 відповіддю сервера.
Пошук за датою потрібен, коли у ЧПУ використовується дата. У цьому випадку при зміні дати запису стара дата записується в метаполі _wp_old_date
.
У запису може бути скільки завгодно старих ярликів.
(повільно) | 50000 разів – 21.05 сек
(повільно) |
PHP 7.2.5, WP 4.9.8
Хуки з функції
Повертає
null
. Нічого.
Використання
wp_old_slug_redirect();
Приклади
#1 Відключимо перевірку та редирект зі старих складів
За замовчуванням при відвідуванні кожного окремого не деревоподібного поста WP робить запит у БД і перевіряє всі метаполя (_wp_old_slug) всіх записів, чи немає ярлика від поточного запиту. Якщо таке метаполі знайдено, то поточний запит вважається старим URL запису, тому робиться редирект на новий URL запису.
Якщо раптом вам така поведінка не потрібна, то можна відключити цю перевірку та редирект через фільтр:
remove_action( 'template_redirect', 'wp_old_slug_redirect' );
Який робиться запит дивіться у функції _find_post_by_old_slug() .
список змін
З версії 2.1.0 | Введено. |