_find_post_by_old_slug() WP 4.9.3
Функция ядра, которая получает ID записи для перенаправления со старого url на новый.
Используется в функции wp_old_slug_redirect(), которая и осуществляет перенаправление, если ID записи был найден.
Алгоритм работы функции _find_post_by_old_slug():
- Создает основу для SQL запроса, чтобы найти ID записи по переданному типу поста и указанному значению в метаполе с ключом
_wp_old_slug
равноеget_query_var('name')
. - Вносит в запрос уточнение на основе
get_query_var('year')
,get_query_var('monthnum')
,get_query_var('day')
, если в ЧПУ записи используется год, месяц, день публикации. - С помощью $wpdb->get_var() делает запрос и возвращает ID записи.
Основа для: wp_old_slug_redirect()
1 раз — 0.000494 сек (быстро) | 50000 раз — 17.66 сек (медленно) | PHP 7.2.5, WP 4.9.8
Хуков нет.
Возвращает
Число. ID записи.
Использование
_find_post_by_old_slug( $post_type );
- $post_type(строка) (обязательный)
- Текущий тип поста на основе переменных запроса.
Заметки
- Смотрите: wp_old_slug_redirect()
- Global. wpdb. $wpdb WordPress database abstraction object.
Список изменений
С версии 4.9.3 | Введена. |
Код _find_post_by_old_slug() find post by old slug WP 5.6
function _find_post_by_old_slug( $post_type ) {
global $wpdb;
$query = $wpdb->prepare( "SELECT post_id FROM $wpdb->postmeta, $wpdb->posts WHERE ID = post_id AND post_type = %s AND meta_key = '_wp_old_slug' AND meta_value = %s", $post_type, get_query_var( 'name' ) );
// If year, monthnum, or day have been specified, make our query more precise
// just in case there are multiple identical _wp_old_slug values.
if ( get_query_var( 'year' ) ) {
$query .= $wpdb->prepare( ' AND YEAR(post_date) = %d', get_query_var( 'year' ) );
}
if ( get_query_var( 'monthnum' ) ) {
$query .= $wpdb->prepare( ' AND MONTH(post_date) = %d', get_query_var( 'monthnum' ) );
}
if ( get_query_var( 'day' ) ) {
$query .= $wpdb->prepare( ' AND DAYOFMONTH(post_date) = %d', get_query_var( 'day' ) );
}
$id = (int) $wpdb->get_var( $query );
return $id;
}