# WP_OLD_SLUG_REDIRECT() │ WP 2.1.0
Эта функция перенаправляет старые слаги на правильные ссылки.
Она пытается найти текущий слаг на основе предыдущих значений.
## Использует
Функции:
- _find_post_by_old_slug()
- _find_post_by_old_date()
**Производительность:**
- 1 раз — 0.000717 сек (медленно)
- 50000 раз — 21.05 сек (медленно)
- PHP 7.2.5, WP 4.9.8
## Хуки, используемые в функции
- old_slug_redirect_post_id
- old_slug_redirect_url
## Результат
Функция ничего не возвращает (null).
## Использование
Функция вызывается следующим образом:
```php
wp_old_slug_redirect();
Примеры
Отключение перенаправлений от старых слагов (POST_NAMES)
По умолчанию, когда вы заходите на отдельную страницу поста, WordPress делает запрос к базе данных и проверяет все мета-поля с названием _wp_old_slug для всех постов. Если находится совпадение, текущий запрос считается старым URL поста, и происходит перенаправление на новый URL.
Если вам это поведение не требуется (что не рекомендуется), вы можете отключить такие перенаправления следующим образом:
remove_action('template_redirect', 'wp_old_slug_redirect');
Для выполнения запроса используется функция _find_post_by_old_slug().
Изменения
Функция была добавлена в версии 2.1.0.
Код функции WP_OLD_SLUG_REDIRECT
Вы можете найти код функции в файле wp-includes/query.php.
function wp_old_slug_redirect() {
if (is_404() && '' !== get_query_var('name')) {
// Определяем тип поста на основе переменных запроса.
if (get_query_var('post_type')) {
$post_type = get_query_var('post_type');
} elseif (get_query_var('attachment')) {
$post_type = 'attachment';
} elseif (get_query_var('pagename')) {
$post_type = 'page';
} else {
$post_type = 'post';
}
if (is_array($post_type)) {
if (count($post_type) > 1) {
return;
}
$post_type = reset($post_type);
}
// Не перенаправлять для иерархических типов постов.
if (is_post_type_hierarchical($post_type)) {
return;
}
$id = _find_post_by_old_slug($post_type);
if (!$id) {
$id = _find_post_by_old_date($post_type);
}
/**
* Фильтр для ID поста, на который происходит перенаправление.
*
* @param int $id ID поста для перенаправления.
*/
$id = apply_filters('old_slug_redirect_post_id', $id);
if (!$id) {
return;
}
$link = get_permalink($id);
if (get_query_var('paged') > 1) {
$link = user_trailingslashit(trailingslashit($link) . 'page/' . get_query_var('paged'));
} elseif (is_embed()) {
$link = user_trailingslashit(trailingslashit($link) . 'embed');
}
/**
* Фильтр для URL перенаправления старого слага.
*
* @param string $link URL перенаправления.
*/
$link = apply_filters('old_slug_redirect_url', $link);
if (!$link) {
return;
}
wp_redirect($link, 301); // Постоянное перенаправление.
exit;
}
}
Связанные функции
SEO
wp_robots()
Перенаправления
auth_redirect()wp_redirect()wp_safe_redirect()wp_sanitize_redirect()wp_validate_redirect()
Таким образом, мы узнали, как работает функция wp_old_slug_redirect() и как её можно использовать или отключить, если это необходимо. Надеюсь, этот материал помог вам лучше понять процесс перенаправления старых слагов в WordPress!