Как программно создать запись

Минимальный пример кода, который добавит новую запись типа post (обычная запись блога).

Для начала формируем массив с данными:

$post_data = array(
    'post_title'    => 'Заголовок записи',
    'post_content'  => 'Содержимое записи.',
    'post_status'   => 'publish', // или 'draft', 'pending' и т. д.
    'post_author'   => 1,         // ID пользователя-автора
    'post_category' => array(3, 4), // ID категорий (если нужно)
);

Что еще можно указать в массиве:

  • post_type — тип записи (по умолчанию post, можно указать page или кастомный тип)
  • post_excerpt — краткое описание
  • post_date — дата публикации (‘2025-07-04 10:00:00’)
  • post_name — slug записи
  • tags_input — массив тегов
  • meta_input — массив метаполей
// Пример массива метаполей
'meta_input' => array(
    'ключ_метаполя' => 'значение',
)

После формирования массива создаем запись с помощью функции wp_insert_post(), передавая в ней массив. Функция создаст новую запись и вернет ее ID. Поэтому можно сразу проверить произошла ли ошибка в процессе создания.

$post_id = wp_insert_post($post_data);

if (is_wp_error($post_id)) {
    // Ошибка при создании записи
    echo 'Ошибка: ' . $post_id->get_error_message();
} else {
    echo 'Запись создана с ID: ' . $post_id;
}

Пример создания кастомного типа записи

$post_data = array(
    'post_title'   => 'Новая книга',
    'post_content' => 'Описание книги.',
    'post_status'  => 'publish',
    'post_type'    => 'book',
);

$post_id = wp_insert_post($post_data);

После создания можно обновить мета-поля, если нужно:

if (!is_wp_error($post_id)) {
    update_post_meta($post_id, 'isbn', '1234567890');
}

Как обновить программно существующую запись?

Бонусом, как с помощью кода изменить уже существующую запись. Используем функцию wp_update_post(), которая принимает в себя по сути тот же самый массив. Основное отличие: в массиве обязательно нужно указать ID записи, которую меняем.

$post_data = array(
    'ID'           => 123,
    'post_title'   => 'Обновлённый заголовок',
);
wp_update_post($post_data);