В недавнем проекте мне нужно было автоматически назначать изображение для поста из URL. Ситуация была такой, у меня была библиотека URL-адресов изображений, при которой в событии публикации нового поста WordPress нам нужно было проверить, чтобы в посте было изображение. Если у него нет показанного изображения, мы автоматически назначаем изображение этому сообщению.
Поэтому у меня был массив URL-адресов изображений, которые использовался для случайного выбора изображения и использования в качестве избранного изображения в сообщении. Чтобы программно назначить изображение для публикации в качестве избранного изображения, вам нужно использовать функцию set_post_thumbnail (), которая принимает два параметра: идентификатор сообщения и идентификатор вложения.
set_post_thumbnail( $postId, $attachmentId );
В WordPress изображение, которое добавляется в медиатеку, называется вложением. Таким образом, чтобы добавить изображение в качестве избранного изображения в сообщение, его нужно сначала добавить в медиатеку, прежде чем мы сможем назначить его для публикации. В этой ситуации я знаю, что все изображения в массиве добавляются в медиа-библиотеку, и нам просто нужно получить идентификатор вложения, чтобы назначить его посту.
Когда изображение добавляется в библиотеку мультимедиа, оно классифицируется как вложение, которое добавляется в таблицу wp_posts с типом сообщения вложения. Это означает, что для получения идентификатора изображения мы можем просто запросить таблицу wp_posts для изображения в столбце guid.
Поскольку нам нужен только столбец идентификатора, мы можем использовать метод get_col, чтобы убедиться, что мы только возвращаем этот идентификатор сообщения.
Проблема, с которой вы столкнетесь при использовании вышеуказанной функции, заключается в том, что она не найдет идентификаторы для изображений, если URL предназначен для автоматически созданного эскиза. WordPress автоматически создает миниатюрные URL-адреса … когда вы загружаете изображение, оно создает несколько изображений с различными размерами ваших медиа-элементов. Чтобы найти это изображение в wp_posts вам нужно удалить размеры из URL перед поиском в Guid столбца на wp_posts.
Если мы получим изображение, возвращенное из этой функции, мы можем затем использовать это для добавления избранного изображения в пост, используя функцию set_post_thumbnail ().
// Check the array is populated with featured images
if(!empty($featuredImages))
{
// Get random picture from remaining images
$randomPicture = array_rand($featuredImages, 1);
// Get an attachment ID of the featured image
$attachmentId = getImageIdByUrl($featuredImages[$randomPicture]);
// Check if attachment ID is not false
if($attachmentId)
{
set_post_thumbnail( $post_id, $attachmentId );
}
}
Источник записи: https://dzone.com