Функция wp_insert_post()
позволяет вставлять или обновлять посты в WordPress. Она является частью ядра WordPress и обрабатывает большинство операций, связанных с созданием постов. Давайте подробнее рассмотрим ее использование, параметры и примеры.
wp_insert_post( array $postarr, bool $wp_error = false, bool $fire_after_hooks = true ): int|WP_Error
Эта функция принимает массив с данными поста и вставляет его в базу данных. Если параметр $postarr
содержит ключ ID
, то функция обновит существующий пост.
Параметры
$postarr
: массив (обязательный) — массив элементов, который описывает пост для вставки или обновления.- ID:
int
— ID поста (по умолчанию 0). - post_author:
int
— ID пользователя, добавившего пост (по умолчанию текущий пользователь). - post_date:
string
— дата поста (по умолчанию текущее время). - post_date_gmt:
string
— дата поста в GMT (по умолчанию значениеpost_date
). - post_content:
string
— содержимое поста (по умолчанию пусто). - post_content_filtered:
string
— отфильтрованное содержимое поста (по умолчанию пусто). - post_title:
string
— заголовок поста (по умолчанию пусто). - post_excerpt:
string
— аннотация поста (по умолчанию пусто). - post_status:
string
— статус поста (по умолчанию ‘draft’). - post_type:
string
— тип поста (по умолчанию ‘post’). - comment_status:
string
— возможность оставлять комментарии (‘open’ или ‘closed’, по умолчанию значениеdefault_comment_status
). - ping_status:
string
— возможность пингов (‘open’ или ‘closed’, по умолчанию значениеdefault_ping_status
). - post_password:
string
— пароль для доступа к посту (по умолчанию пусто). - post_name:
string
— имя поста (по умолчанию очищенное название поста). - to_ping:
string
— список URL для пинга, разделенный пробелами или переносами строк (по умолчанию пусто). - pinged:
string
— список URL, которые были пингованы, разделенный пробелами или переносами строк (по умолчанию пусто). - post_parent:
int
— ID родительского поста (по умолчанию 0). - menu_order:
int
— порядок отображения поста (по умолчанию 0). - post_mime_type:
string
— MIME-тип поста (по умолчанию пусто). - guid:
string
— глобальный уникальный идентификатор для ссылки на пост (по умолчанию пусто). - import_id:
int
— ID поста для вставки нового поста (по умолчанию 0, если указан, не должен совпадать с существующим ID). - post_category:
int[]
— массив ID категорий (по умолчанию значениеdefault_category
). - tags_input:
array
— массив имен, слогов или ID тегов (по умолчанию пусто). - tax_input:
array
— массив терминов таксономии, организованный по имени таксономии (по умолчанию пусто). - meta_input:
array
— массив мета-значений поста, организованный по ключу мета (по умолчанию пусто). - page_template:
string
— шаблон страницы для использования (по умолчанию пусто).
- ID:
$wp_error
: bool (необязательный) — если указаноtrue
, функция вернет объектWP_Error
в случае неудачи. По умолчаниюfalse
.$fire_after_hooks
: bool (необязательный) — если указаноtrue
, будут вызваны хуки после вставки. По умолчаниюtrue
.
Функция возвращает:
- ID нового поста в случае успеха.
- 0 или объект
WP_Error
в случае неудачи.
Пример 1: Вставка нового поста
// Подготовка данных поста
$post_data = array(
'post_title' => 'Мой уникальный пост',
'post_content' => 'Содержимое моего поста.',
'post_status' => 'publish',
'post_author' => get_current_user_id(),
'post_category' => array( 2, 4 ) // массив с ID категорий
);
// Вставка поста в базу данных
$post_id = wp_insert_post( $post_data );
if ( ! is_wp_error( $post_id ) ) {
echo 'Пост успешно создан! ID: ' . $post_id;
} else {
echo 'Ошибка: ' . $post_id->get_error_message();
}
Пример 2: Обновление существующего поста
// Обновление существующего поста
$update_data = array(
'ID' => 45, // ID поста для обновления
'post_title' => 'Обновленный заголовок',
'post_content' => 'Обновленное содержимое поста.',
);
// Вставка данных поста для обновления
$updated_post_id = wp_insert_post( $update_data );
if ( ! is_wp_error( $updated_post_id ) ) {
echo 'Пост успешно обновлен! ID: ' . $updated_post_id;
} else {
echo 'Ошибка: ' . $updated_post_id->get_error_message();
}
Пример 3: Вставка поста с пользовательскими таксономиями и метаданными
// Данные для поста с пользовательскими таксономиями и метаданными
$custom_post_data = array(
'post_title' => 'Пост с таксономиями',
'post_content' => 'Содержимое поста с пользовательскими таксономиями.',
'post_status' => 'draft',
'post_author' => get_current_user_id(),
'tax_input' => array(
'my_custom_tax' => array( 12, 15 ), // массив с ID таксономий
),
'meta_input' => array(
'custom_meta_key' => 'Значение метаданных',
),
);
// Вставка поста с таксономиями и метаданными
$custom_post_id = wp_insert_post( $custom_post_data );
if ( ! is_wp_error( $custom_post_id ) ) {
echo 'Пост с пользовательскими таксономиями создан! ID: ' . $custom_post_id;
} else {
echo 'Ошибка: ' . $custom_post_id->get_error_message();
}
Замечания
- Обработка ошибок: Важно проверять, является ли возвращаемое значение объектом
WP_Error
, чтобы избежать ошибок при работе с несуществующими постами. - Безопасность:
wp_insert_post()
автоматически проходит данные через функциюsanitize_post()
, но вы должны дополнительно очищать данные от HTML или JavaScript, если это необходимо. - Работа с дубликатами: Чтобы предотвратить создание дубликатов, можно использовать функцию
post_exists()
перед вставкой нового поста.
Заключение
Функция wp_insert_post()
является мощным инструментом для работы с постами в WordPress. Она предоставляет гибкость для вставки и обновления постов, а также для работы с метаданными и таксономиями. Используйте ее для создания уникальных решений в ваших проектах на WordPress!