«
»

В недавнем проекте мне нужно было автоматически назначать изображение для поста из URL. Ситуация была такой, у меня была библиотека URL-адресов изображений, при которой в событии публикации нового поста WordPress нам нужно было проверить, чтобы в посте было изображение. Если у него нет показанного изображения, мы автоматически назначаем изображение этому сообщению.

Поэтому у меня был массив URL-адресов изображений, которые использовался для случайного выбора изображения и использования в качестве избранного изображения в сообщении. Чтобы программно назначить изображение для публикации в качестве избранного изображения, вам нужно использовать функцию set_post_thumbnail (), которая принимает два параметра: идентификатор сообщения и идентификатор вложения.

set_post_thumbnail( $postId, $attachmentId );

В WordPress изображение, которое добавляется в медиатеку, называется вложением. Таким образом, чтобы добавить изображение в качестве избранного изображения в сообщение, его нужно сначала добавить в медиатеку, прежде чем мы сможем назначить его для публикации. В этой ситуации я знаю, что все изображения в массиве добавляются в медиа-библиотеку, и нам просто нужно получить идентификатор вложения, чтобы назначить его посту.

Когда изображение добавляется в библиотеку мультимедиа, оно классифицируется как вложение, которое добавляется в таблицу wp_posts с типом сообщения вложения. Это означает, что для получения идентификатора изображения мы можем просто запросить таблицу wp_posts для изображения в столбце guid.

SELECT ID FROM $wpdb->posts WHERE guid = $imageUrl

Поскольку нам нужен только столбец идентификатора, мы можем использовать метод get_col, чтобы убедиться, что мы только возвращаем этот идентификатор сообщения.

function getImageIdByUrl( $url ) { global $wpdb; $image = $wpdb->get_col($wpdb->prepare("SELECT ID FROM $wpdb->posts WHERE guid='%s';", $url )); if(!empty($image)) { return $image[0]; } return false; }

Проблема, с которой вы столкнетесь при использовании вышеуказанной функции, заключается в том, что она не найдет идентификаторы для изображений, если URL предназначен для автоматически созданного эскиза. WordPress автоматически создает миниатюрные URL-адреса … когда вы загружаете изображение, оно создает несколько изображений с различными размерами ваших медиа-элементов. Чтобы найти это изображение в wp_posts вам нужно удалить размеры из URL перед поиском в Guid столбца на wp_posts.

function getImageIdByUrl( $url ) { global $wpdb; // If the URL is auto-generated thumbnail, remove the sizes and get the URL of the original image $url = preg_replace( '/-d+xd+(?=.(jpg|jpeg|png|gif)$)/i', '', $url ); $image = $wpdb->get_col($wpdb->prepare("SELECT ID FROM $wpdb->posts WHERE guid='%s';", $url )); if(!empty($image)) { return $image[0]; } return false; }

Если мы получим изображение, возвращенное из этой функции, мы можем затем использовать это для добавления избранного изображения в пост, используя функцию 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

Связанные записи
WordPressПлагины

Полный обзор лучших плагинов для календаря бронирования в WordPress

ElementorWordPressВсе для разработки плагиновПлагины

Создание пользовательских виджетов Elementor - правильный путь! | Бен Маршалл

WordPressПлагины

Swift Performance - Рекомендуемые настройки производительности | Полное руководство 2020

WordPressВсе для разработки плагиновВсе для разработки шаблонов

Настройка PHP CodeSniffer в PhpStorm с помощью стандартов кодирования WordPress | Келлен Мейс