Функция get_post() в WordPress: получение данных поста

# Функция get_post() в WordPress

Функция get_post() используется для получения данных текущего или указанного поста в WordPress. Чтобы использовать её, вам нужно указать ID поста, в противном случае функция вернёт текущий пост. Она возвращает объект типа WP_Post.

## Что такое пост?

Постом может быть любой тип записи: вложение, обычный пост, страница или любой пользовательский тип записи. Если пост не указан, функция будет работать с глобальной переменной $post, которая представляет текущий пост.

### Важно!

Функция get_post() без параметров возвращает глобальный объект $post. Это было протестировано в WordPress версии 6.0.

## Примеры использования функции get_post()

### Пример 1: Получение данных поста

```php
global $post;
$post = get_post(1);

echo $post->post_type; // Выводит: post

В этом примере мы запрашиваем пост с ID 1 и выводим его тип.

Пример 2: Использование текущего поста

$some_post = get_post();
$some_post->post_type = 'my_post_type';

echo $post->post_type; // Выводит: my_post_type

Здесь мы получаем текущий пост и задаём ему новый тип.

Пример 3: Работа с глобальной переменной

Если мы уже имеем глобальную переменную $post, вот как это будет выглядеть:

$mypost = get_post();
$mypost->post_type = 'my_post_type';

global $post;
echo $post->post_type; // Выводит: my_post_type

Важно знать

До версии 3.5 первый параметр функции мог принимать только переменную. Если вы передавали число непосредственно, возникала ошибка:

// Корректно: передаётся переменная
$post_id = 7;
$the_post = get_post($post_id);

// Ошибка: передано число
$the_post = get_post(7);

С версии 3.5 можно передавать число напрямую.

Не путайте с get_posts()

Функция get_posts() используется для получения данных нескольких постов, в то время как get_post() работает только с одним постом.

Получение поста по слагу

Чтобы получить пост по его слагу, используйте функцию get_page_by_path().

Формат возврата

  • WP_Post: когда пост успешно получен и $output = OBJECT.
  • array: когда пост успешно получен и $output равно ARRAY_A или ARRAY_N.
  • null: в случае ошибки.

Синтаксис использования

$post = get_post($post, $output, $filter);
  • $post (int/WP_Post/null): ID поста или объект поста, данные которого вам нужны. null — данные текущего поста.
    • По умолчанию: глобальный объе��т $post.
  • $output (string): Тип возвращаемых данных. Может быть:
    • OBJECT: объект типа WP_Post
    • ARRAY_A: ассоциативный массив
    • ARRAY_N: числовой массив.
    • По умолчанию: OBJECT.
  • $filter (string): Как фильтровать возвращаемые данные поста. Описания возможных значений смотрите в функции sanitize_post_field(). Принимает значения 'raw', 'edit', 'db' или 'display'.
    • По умолчанию: 'raw'.

Примеры

Пример 1: Получение форматированного контента поста

Если вам нужны специальные элементы в контенте (например, шорткоды или теги абзаца), используйте фильтры, а не функцию do_shortcode():

$post = get_post(42);
$content = apply_filters('the_content', $post->post_content);

Пример 2: Получение данных одного поста

Получите данные поста с ID 7 и извлеките заголовок:

$post = get_post(7);
$title = $post->post_title;

Вы также можете получить данные поста в виде ассоциативного массива и получить заголовок:

$post = get_post(7, ARRAY_A);
$title = $post['post_title'];

Пример 3: Структура WP_Post объекта

Вот как может выглядеть объект WP_Post:

$post = get_post(2);
print_r($post);
WP_Post Object(
    [ID]                => 2
    [post_author]       => 1
    [post_date]         => 2018-03-21 17:25:55
    [post_content]      => Текст поста...
    [post_title]        => Контакты
    [post_status]       => publish
    [comment_status]    => closed
    [post_type]         => page
    [guid]              => https://site.com/contacts
)

Заключение

Функция get_post() является важным инструментом для получения данных о постах в WordPress. Она позволяет работать с различными типами постов и получать нужную информацию.

Используемая версия

Статья основана на версии WordPress 6.7.2.

Leave a Reply

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