Создаем пост через код (картинка, title, description)
Привет. Мне нужно было создать скриптом сразу 250 постов на CMS WordPress. Да непросто создать, а еще заполнить все необходимые поля, т.е. чтобы картинка была у поста, чтобы заполнены SEO параметры. В Интернете ифы много, но все они для старых версий WordPress. По этому решил написать данный пост, чтобы в будущем не искать инфу и может кому-то пригодится.
Данное решение подходит для WP 5.8.
Задача
Записать данные шаблона, картинки, тайтла, дескрипшина и др. в БД.
Теория
Шаблон для постоянной страницы/поста задается в метаполе _wp_page_template с помощью add_post_meta() или update_post_meta().
Тайтлов и дескрипшинов по умолчанию в WP нет, я использую сеошный плагин Yoast SEO, он так хранит эти данные в мета-полях записей. Поэтому ищем в документации или базе (что намного проще) как называются ключи у этих полей и используйте те же функции add_post_meta() или update_post_meta().
Что касается установки изображения записи, можно воспользоваться функцией media_sideload_image() или сочетанием wp_insert_attachment() и set_post_thumbnail(). Разница в том, что первая загружает изображение в медиатеку WP и устанавливает его для записи, а последние создают только записи в базе.
PS. Для отдельной установки категорий, таксономий и тегов вам может пригодится функция wp_set_object_terms().
Решение
//готовим массив с данными
$updated_post_arr_ = array(
'post_title' => 'Test20201', //название поста
'post_content' => $contents[0]["name_bank_ru"], //название поста, я сохраняю сюда данные из API
'post_author' => '5', //под каким пользователем добавлен пост
'comment_status' => 'open', //открыть комментарии
'post_status' => 'publish',
'post_category' => array(129), //категория
'tags_input' => array('Активен') //теги
);
$my_post_id_ = wp_insert_post($updated_post_arr_);
//добавляем метеоданные
update_post_meta($my_post_id_, '_wp_page_template', 'single-current-bank.php');
update_post_meta($my_post_id_, '_yoast_wpseo_title', 'Описание тайтла СЕО;
update_post_meta($my_post_id_, '_yoast_wpseo_metadesc', 'Описание дескрипшина СЕО');
// файл должен находиться в директории загрузок WP - файл, который будем подгружать к посту
$filename = '2019/06/Snimok-640x319.png';
// ID поста, к которому прикрепим вложение.
$parent_post_id = $my_post_id_;
// Проверим тип поста, который мы будем использовать в поле 'post_mime_type'.
$filetype = wp_check_filetype( basename( $filename ), null );
// Получим путь до директории загрузок.
$wp_upload_dir = wp_upload_dir();
// Подготовим массив с необходимыми данными для вложения.
$attachment = array(
'guid' => $wp_upload_dir['url'] . '/' . basename( $filename ),
'post_mime_type' => $filetype['type'],
'post_title' => preg_replace( '/\.[^.]+$/', '', basename( $filename ) ),
'post_content' => '',
'post_status' => 'inherit'
);
// Вставляем запись в базу данных.
$attach_id = wp_insert_attachment( $attachment, $filename, $parent_post_id );
// Подключим нужный файл, если он еще не подключен
// wp_generate_attachment_metadata() зависит от этого файла.
require_once( ABSPATH . 'wp-admin/includes/image.php' );
// Создадим метаданные для вложения и обновим запись в базе данных.
$attach_data = wp_generate_attachment_metadata( $attach_id, $filename );
wp_update_attachment_metadata( $attach_id, $attach_data );
//Прикрепляем к посту картинку
set_post_thumbnail($my_post_id_,$attach_id);
Описал все подробно, что будет непонятно пишите в комментариях.

