## REDIRECT_CANONICAL() ─ WP 2.3.0
Функция redirect_canonical()
перенаправляет входящие ссылки на правильный URL-адрес на основе адреса вашего сайта.
Когда поисковые системы видят различные URL-адреса, такие как www.somedomain.com
и somedomain.com
, они могут считать их разными страницами, даже если они ведут на одну и ту же. Эта функция помогает избежать наказания за дублированный контент, перенаправляя все входящие ссылки на один из этих адресов.
Функция не будет перенаправлять для таких страниц, как ленты, трэкбэки, поисковые запросы и администраторские URL-адреса. Она также не работает с запросами POST и н��которыми другими форматами.
Если пользователь вводит несуществующий URL, функция попытается определить правильную страницу.
### Места, где применяется функция
- wp_signup_location
- redirect_canonical
### Возвращаемое значение
Функция возвращает строку, которая представляет собой URL-адрес, на который нужно перенаправить.
### Использование
```php
redirect_canonical( $requested_url, $do_redirect );
$requested_url
(строка): Запрашиваемый URL-адрес, необходим для определения необходимости перенаправления.- По умолчанию: null
$do_redirect
(логический): Осуществлять ли перенаправление на новый URL.- По умолчанию: true
Примеры
Пример 1: Отключение перенаправления на постах при пагинации
По умолчанию WordPress перенаправляет на главную страницу поста, когда вы пытаетесь перейти на страницу пагинации поста. Если в посте нет страниц пагинации, это поведение не всегда нужно.
Например, если мы создадим модуль для постов, и нам нужно, чтобы URL пагинации работал как /mypage/page/2
. Функция запустит перенаправление на /mypage/
, но это нам не нужно:
// Отключим перенаправление на страницах, потому что /page/2 перенаправляет на /
add_filter( 'redirect_canonical', 'page_disable_redirect_canonical' );
function page_disable_redirect_canonical( $redirect_url ) {
if( is_paged() ) {
$redirect_url = false;
}
return $redirect_url;
}
Пример 2: Полное отключение функции канонических перенаправлений
Этот код полностью отключает функциональность канонических перенаправлений:
remove_action( 'template_redirect', 'redirect_canonical' );
Пример 3: Удаление перенаправления для публичного параметра, такого как 'year' в пользовательской таксономии
Если у вас есть ссылка типа /?event_category=xxx&year=2017
:
- Если не добавлять этот фильтр, произойдет перенаправление на
/2017/
. - Если использовать этот фильтр, останется на странице
/?event_category=xxx
.
Этот код полезен для создания фильтра в таксономиях.
add_filter( 'redirect_canonical', 'pick_event_year_redirect', 10 );
function pick_event_year_redirect( $redirect_url ) {
if ( is_tax( 'event_category' ) && is_year() ) {
return '';
}
return $redirect_url;
}
Примечания
- Глобальные переменные:
$wp_rewrite
,$is_IIS
,$wp_query
,$wpdb
,$wp
. - Логические значения:
$is_IIS
может быть true или false.
Изменения
- С версии 2.3.0 добавлено использование функции.
Код функции redirect_canonical()
─ WP 6.7.2
function redirect_canonical( $requested_url = null, $do_redirect = true ) {
global $wp_rewrite, $is_IIS, $wp_query, $wpdb, $wp;
if ( isset( $_SERVER['REQUEST_METHOD'] ) && ! in_array( strtoupper( $_SERVER['REQUEST_METHOD'] ), array( 'GET', 'HEAD' ), true ) ) {
return;
}
// Проверка на preview, админку и т.д.
if ( is_admin() || is_search() || is_preview() || is_trackback() || is_favicon()
|| ( $is_IIS && ! iis7_supports_permalinks() )
) {
return;
}
// Формируем запрашиваемый URL.
if ( ! $requested_url && isset( $_SERVER['HTTP_HOST'] ) ) {
$requested_url = is_ssl() ? 'https://' : 'http://';
$requested_url .= $_SERVER['HTTP_HOST'];
$requested_url .= $_SERVER['REQUEST_URI'];
}
$original = parse_url( $requested_url );
if ( false === $original ) {
return;
}
$redirect_url = false;
// Обработка 404 ошибок и попытка найти правильную страницу.
if ( is_404() ) {
// Логика для перенаправления.
}
// Дальнейшая логика...
// Применение фильтров.
$redirect_url = apply_filters( 'redirect_canonical', $redirect_url, $requested_url );
if ( $do_redirect && $redirect_url ) {
wp_redirect( $redirect_url, 301 );
exit;
}
return $redirect_url;
}
Связанные функции
add_query_arg()
get_queried_object()
get_queried_object_id()
get_query_var()
get_search_query()
get_status_header_desc()
is_embed()
is_robots()
remove_query_arg()
wp()