Функция wp_insert_post - обновление/добавление записи заданного типа

Функция wp_insert_post вставляет запись  (заданного типа)  в таблицу wp_posts базы данных WordPress.

<?php wp_insert_post( $post, $wp_error ); ?>

$post (array) (обязательный параметр) - массив параметров записи.

$wp_error (bool) (необязательный параметр) - включает возврат объекта WP_Error в случае ошибки, , по умолчанию false

Функция возвращает ID созданной записи  (post ID), а в случае ошибки возвращает 0 или объект WP_Error, если $wp_error равно TRUE.

В массиве $post должны быть заданы

  • заголовок записи $post['post_title'] и
  • содержимое записи $post['post_content']

элемент массива $post['ID'],  должен быть пустым или не задан.

Если задан элемент массива $post['ID'],  функция обновляет существующую запись с заданным ID

Остальные элементы этого массив задавать необязательно. По умолчанию используются значения:

$defaults = array(
  'post_status'           => 'draft', // черновик
  'post_type'             => 'post', // тип - запись блога (пост) 
  'post_author'           => $user_ID, // ID автора
  'ping_status'           => get_option('default_ping_status'), 
  'post_parent'           => 0, // родитель
  'menu_order'            => 0, // порядок в меню
  'to_ping'               =>  '', 
  'pinged'                => '', 
  'post_password'         => '', // без пароля
  'guid'                  => '',
  'post_content_filtered' => '',
  'post_excerpt'          => '', // анонс
  'import_id'             => 0
);

Более подробный список:

$post = array(
  'ID'             => [ <post id> ] // задайте, чтобы обновить существующую запись 
  'post_content'   => [ <string> ] // текст записи
  'post_name'      => [ <string> ] // slug - часть URL записи
  'post_title'     => [ <string> ] // заголовок
  'post_status'    => [ 'draft' | 'publish' | 'pending'| 'future' | 'private' | зарегистрированный статус ] // статус, по умолчанию 'draft
  'post_type'      => [ 'post' | 'page' | 'link' | 'nav_menu_item' | custom post type ] // тип записи, по умолчанию 'post'
  'post_author'    => [ <user ID> ] // ID автора, по умолчанию ID текущего пользователя
  'ping_status'    => [ 'closed' | 'open' ] // разрешение оповещений
  'post_parent'    => [ <post ID> ] // задает ID родителя записи, по умолчанию 0.
  'menu_order'     => [ <order> ] // для page задает порядок в меню, по умолчанию 0.
  'to_ping'        => // список (через пробел или с новой строки) URL-адресов для оповещения.
  'pinged'         => // аналогичный список URL-адресов, которые были оповещены
  'post_password'  => [ <string> ] // пароль
  'guid'           => // обычно задает WordPress
  'post_content_filtered' => // обычно задает WordPress
  'post_excerpt'   => [ <string> ] // анонс записи
  'post_date'      => [ Y-m-d H:i:s ] // время создания
  'post_date_gmt'  => [ Y-m-d H:i:s ] // время создания в GMT (по Гринвичу)
  'comment_status' => [ 'closed' | 'open' ] // разрешение комментариев для записи
  'post_category'  => [ array(<category id>, ...) ] // рубрика, по умолчанию не задана
  'tags_input'     => [ '<tag>, <tag>, ...' | array ] // метки
  'tax_input'      => [ array( <taxonomy> => <array | string>, <taxonomy_other> => <array | string> ) ] // для custom taxonomies
  'page_template'  => [  ] // имя файла шаблона (например, template.php), игнорируется, если тип записи не Page
);

*** Задать шаблон для записи (не типа Page) можно как значение  поля  $meta_key==  _wp_page_template в функции update_post_meta

<?php update_post_meta($post_id, $meta_key, $meta_value, $prev_value); ?>

 

Примеры добавления записи с помощью функции wp_insert_post

<?php
// Подключение wordpress (нужно, если это отдельный php-файл вне wordpress-сайта):
require('wp-blog-header.php');
// Создание объекта записи (post)
$my_post = array();
$my_post['post_title'] = "заголовок";
$my_post['post_content'] = "Содержимое записи";
// Добавление записи в базу данных
wp_insert_post( $my_post );
?>

Безопасность

В функции wp_insert_post() вызывается функция  sanitize_post(), которая обеспечивает валидацию данных перед сохранением в базу данных. Но в post_title и других полях могут оказаться теги (HTML, JavaScript и PHP), и их нужно удалить с помощью  функции wp_strip_all_tags().

$my_post = array(
 'post_title' => wp_strip_all_tags( $_POST['post_title'] ),
 'post_content' => $_POST['post_content'],
 'post_status' => 'publish',
 'post_author' => 1,
 'post_category' => array( 8,39 )
 );
 $post_id = wp_insert_post( $my_post );
/*$post_id можно использовать в функции add_post_meta или update_post_meta */