Поиск поста по старому слагу: _FIND_POST_BY_OLD_SLUG()

## _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

  1. Пример использования из функции 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 вашего сайта.

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *