Как добавить в запись WordPress featured_image при помощи wp_insert_post?
Дано - массовое добавление записей в 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 картинки - это тоже посты, поэтому если вам нужно к записи прикрепить какую-то обложку, то для этого вам нужно:
- либо id уже добавленной картинки вставить в мета поле записи
- либо сначала создать пост, получить его id, потом создать пост-изображение, получить его id, и потом вставить в мету первого
Хотя, можно сделать так, чтобы картинка выводилась нестандартно - тогда ровно так же придумываем мету, туда указываем ссылку на картинку, а далее если у постов такая мера есть и она не пустая, то выводить изображение из ссылки по мете.
- Очень доходчивое объяснение, спасибо. Сейчас попробую
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
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); }
Если у вас известен только URL, сначала проверьте, есть ли этот файл в медиабиблиотеке:
$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, а установка миниатюры должна выполняться только после успешного создания записи.