wp_insert_post() — функция позволяет создать новую запись / страницу или обновить уже существующую

Функция вставляет посты (записи, страницы, произвольные типы постов) в базу данных WordPress. В случае успеха возвращает ID поста, в случае неудачи либо 0 либо объект WP_Error ( в зависимости от значения второго параметра ).

Если же вам нужно сделать несколько записей, то просто запустите эту функцию в цикле PHP.

wp_insert_post( $postarr, $wp_error = false )
$postarr
(массив) содержит информацию о посту.

ID
ID поста, который нужно обновить. При создании нового поста этот параметр указывать не нужно.
post_content
Содержимое поста (контент).
post_name
Ярлык (если не указан, то берется из заголовка).
post_title
Собственно заголовок.
post_status
Статус поста.

Если установлено future (запланированная публикация в будущем), то время публикации post_date (этот параметр дан ниже) должно быть соответствующим.

По умолчанию — draft, то есть, если вы не укажете этот параметр, то пост создастся как черновик.

post_type
Тип поста. Например post — запись (по умолчанию), page — страница.
post_author
Автор поста, а точнее его ID (по умолчанию — текущий пользователь, который авторизован).
ping_status
Пингбэки и трэкбеки:

  • open — разрешены,
  • closed — запрещены.

По умолчанию — значение get_option('default_ping_status') (находится в Настройки > Обсуждение, скриншот ниже).

Значение ping_status по умолчанию в функции wp_insert_post()
post_parent
ID родительского поста.
menu_order
Порядок в меню (применимо для страниц и не применимо для записей).
to_ping
Список URL сервисов обновления, разделенных пробелом, либо каждый URL — с новой строки (нужны для ускоренной индексации постов, подробнее про сервисы обновления в Настройки > Написание). Пример:

http://rpc.weblogs.com/RPC2
http://bing.com/webmaster/ping.aspx
pinged
Список URL сервисов обновления, на которые уже был отправлен запрос.
post_password
Пароль к посту.
post_excerpt
Поле «Цитата», анонс поста.
post_date
Когда пост был (или должен быть) опубликован Y-m-d H:i:s, по умолчанию текущая дата.
post_date_gmt
в GMT.
comment_status
Разрешить open или запретить closed комментирование этого поста.
post_category, tags_input, tag_input
Для того, чтобы присвоить посту рубрики, метки или элементы какой-либо произвольной таксономии, используйте функцию wp_set_object_terms().
page_template
Название файла шаблона, например template-portfolio.php.

Если тип поста — не страницы page, значение этого параметра будет проигнорировано.

$wp_error
true — возвращать объект WP_Error в случае неудачи (по умолчанию — false).

Примеры

Создаем пост и присваиваем ему рубрики и метки

$my_postarr = array(
	'post_title'    => 'Новый пост',
	'post_content'  => 'Это мой новый пост.', // контент
	'post_status'   => 'publish' // опубликованный пост
);
 
// добавляем пост и получаем его ID 
$my_post_id = wp_insert_post( $my_postarr );
 
// присваиваем рубрику к посту (ссылка на документацию wp_set_object_terms() дана чуть выше)
wp_set_object_terms( $my_post_id, 5, 'category' );
 
// присваиваем метки
wp_set_object_terms( $my_post_id, array(7, 8), 'post_tag' );

Как изменить заголовок поста через функцию?

Этим способом вы также сможете изменить и другие параметры поста, упомянутые в статье.

$updated_post_arr = array(
	'ID'		=> 500, // допустим, ID поста, заголовок которого нужно изменить, равен 500
	'post_title'    => 'Новый заголовок' // заголовок
);
 
// обновляем пост (все остальные его параметры останутся прежними)
wp_insert_post( $updated_post_arr );
Миша Рудрастых Разработчик WordPress WooCommerce

Миша Рудрастых

Впервые познакомился с WordPress в 2009 году, и после двух лет мучений с Joomla и самописными движками это был просто бальзам на душу. С 2014 года меня можно встретить на WordCamp — официальной конфе по WP в Москве, иногда там выступаю. Также в настоящее время веду курсы по WordPress в Epic Skills в Питере.