Как добавить в запись WordPress featured_image при помощи wp_insert_post?

Ссылка скопирована
1 ответ

Дано - массовое добавление записей в Wordpress при помощи:

$post_data = [
'post_title' => "Название поста",
'post_content' => 'Текст',
'comment_status'=> 'open',
'post_name' => 'my-slug',
'post_status' => 'publish',
'post_type' => 'post',
'post_category' => [4],
'post_author' => 1,
'post_date' => "$row[DATE_CREATE]",
'ping_status' => get_option('default_ping_status'),
'post_parent' => 0,
'menu_order' => 0,
'to_ping' => '',
'pinged' => '',
'post_password' => '',
'post_excerpt' => '',
'meta_input' => [ '_yoast_wpseo_title'=>'Тайтл', '_yoast_wpseo_metadesc'=>'Дескрипшн'
];

$post_id = wp_insert_post( wp_slash( $post_data ) );

На хостинг уже загружены для этих записей картинки, которые должны отображаться в качестве featured image, их урлы известны. Как добавить такую картинку в запись? Можно ли просто добавить еще один элемент массива meta_input? Если да, то какой?

Дополнительно

Ответы:

В Wordpress картинки - это тоже посты, поэтому если вам нужно к записи прикрепить какую-то обложку, то для этого вам нужно:

  1. либо id уже добавленной картинки вставить в мета поле записи
  2. либо сначала создать пост, получить его id, потом создать пост-изображение, получить его id, и потом вставить в мету первого

Хотя, можно сделать так, чтобы картинка выводилась нестандартно - тогда ровно так же придумываем мету, туда указываем ссылку на картинку, а далее если у постов такая мера есть и она не пустая, то выводить изображение из ссылки по мете.

  • Очень доходчивое объяснение, спасибо. Сейчас попробую
Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Ольга Сеть Ответ

Featured image в WordPress хранится не как URL, а как связь записи с attachment ID в метаполе _thumbnail_id. Поэтому просто передать ссылку на файл в meta_input недостаточно. Если картинка уже есть в медиабиблиотеке и вы знаете ее attachment ID, технически можно добавить '_thumbnail_id' => $attachment_id, но практичнее после создания записи вызвать set_post_thumbnail(): так код понятнее и легче ловить ошибки.

$post_id = wp_insert_post(wp_slash($post_data));
 
if (! is_wp_error($post_id) && $post_id) {
    set_post_thumbnail($post_id, $attachment_id);
}

$post_id = wp_insert_post(wp_slash($post_data)); if (! is_wp_error($post_id) && $post_id) { set_post_thumbnail($post_id, $attachment_id); }

Если у вас известен только URL, сначала проверьте, есть ли этот файл в медиабиблиотеке:

$attachment_id = attachment_url_to_postid($image_url);
 
if ($attachment_id) {
    set_post_thumbnail($post_id, $attachment_id);
}

$attachment_id = attachment_url_to_postid($image_url); if ($attachment_id) { set_post_thumbnail($post_id, $attachment_id); }

Если файл просто лежит на хостинге, но не зарегистрирован в медиабиблиотеке, WordPress не считает его вложением. Тогда нужно создать attachment: либо загрузить через media_sideload_image() для внешнего URL, либо через wp_insert_attachment() и wp_generate_attachment_metadata() для локального файла. Для массового импорта обязательно храните исходный URL или хэш файла в отдельной meta и проверяйте дубли, иначе при повторном запуске получите сотни одинаковых изображений. Также не забывайте, что wp_insert_post() может вернуть WP_Error, а установка миниатюры должна выполняться только после успешного создания записи.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно