Функция 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!