Создаем пост через код (картинка, 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);

Описал все подробно, что будет непонятно пишите в комментариях.

Помогла статья? Оцените её
1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд
Оценок: 1
Загрузка...
Добавить комментарий

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.