## _FIND_POST_BY_OLD_SLUG() – Поиск поста по старому слагу
Функция _find_post_by_old_slug() используется для поиска ID поста, чтобы перенаправить старый слаг.
### Важно!
Эта функция предназначена для внутреннего использования в ядре WordPress, и не рекомендуется использовать её в вашем коде.
### Кому это нужно?
Используется в: wp_old_slug_redirect()
### Показатели производительности:
- Однократный вызов: 0.000494 сек (быстро)
- 50,000 вызовов: 17.66 сек (медленно)
- PHP версия: 7.2.5, WordPress версия: 4.9.8
### Возвращаемое значение
- **Тип**: int
- **Описание**: ID поста.
### Пример использования
```php
_find_post_by_old_slug( $post_type );
- $post_type (string, обязательный): текущий тип поста на основе переменных запроса.
Пример из ядра WordPress
- Пример использования из функции
wp_old_slug_redirect().
Примечания
- Смотрите:
wp_old_slug_redirect() - Глобально используется:
wpdb.$wpdb— объект для работы с базой данных WordPress.
Изменения
- С версии 4.9.3 добавлена в ядро.
Код функции
Вот код функции _find_post_by_old_slug():
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' ) );
/*
* Если указаны год, месяц или день, сделаем наш запрос более точным,
* на случай, если существует несколько идентичных значений _wp_old_slug.
*/
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' ) );
}
$key = md5( $query );
$last_changed = wp_cache_get_last_changed( 'posts' );
$cache_key = "find_post_by_old_slug:$key:$last_changed";
$cache = wp_cache_get( $cache_key, 'post-queries' );
if ( false !== $cache ) {
$id = $cache;
} else {
$id = (int) $wpdb->get_var( $query );
wp_cache_set( $cache_key, $id, 'post-queries' );
}
return $id;
}
### Пояснения к коду
- **$wpdb**: это объект, который помогает работать с базой данных WordPress.
- **$query**: SQL-запрос, который ищет ID поста по старому слагу в мета-таблице.
- **wp_cache_get()** и **wp_cache_set()**: функции для работы с кэшированием запросов. Это помогает уменьшить нагрузку на базу данных, если функция вызывается много раз.
Эта функция позволяет вам находить посты по их старым слагам и обеспечивать их перенаправление, тем самым улучшая опыт пользователей и SEO вашего сайта.