Создаем пост через код (картинка, 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);
Описал все подробно, что будет непонятно пишите в комментариях.