Как установить изображение с изображением (уменьшенное изображение) по URL-адресу изображения при использовании wp_insert_post ()?

Просматривая запись ссылки на функцию для wp_insert_post () , я заметил, что в требуемом массиве нет параметра, который позволит мне установить «Лучшее изображение» для сообщения, отображаемого в качестве миниатюры сообщения в моей теме.

Я рассмотрел такие функции, как set_post_thumbnail () , как предложил г-н Беннетт, но это, по-видимому, является относительно новым дополнением к самому WordPress и коду WordPress. Таким образом, я не могу найти источники, объясняющие, как должен быть получен и предоставлен параметр $ thumbnail_id. Если это действительно функция для использования, каким образом я могу предоставить ее с допустимым параметром $ thumbnail_id, когда все, что у меня есть, является URL-адресом изображения?

Заранее спасибо!

Solutions Collecting From Web of "Как установить изображение с изображением (уменьшенное изображение) по URL-адресу изображения при использовании wp_insert_post ()?"

Вы можете установить изображение как миниатюру сообщения, когда оно находится в медиатеке. Чтобы добавить изображение в медиатеку, необходимо загрузить его на свой сервер. У WordPress уже есть функция для размещения изображений в медиатеке, вам нужен только сценарий, который загружает ваш файл.

Применение:

Generate_Featured_Image( '../wp-content/my_image.jpg', $post_id ); // $post_id is Numeric ID... You can also get the ID with: wp_insert_post() 

Функция:

 function Generate_Featured_Image( $image_url, $post_id ){ $upload_dir = wp_upload_dir(); $image_data = file_get_contents($image_url); $filename = basename($image_url); if(wp_mkdir_p($upload_dir['path'])) $file = $upload_dir['path'] . '/' . $filename; else $file = $upload_dir['basedir'] . '/' . $filename; file_put_contents($file, $image_data); $wp_filetype = wp_check_filetype($filename, null ); $attachment = array( 'post_mime_type' => $wp_filetype['type'], 'post_title' => sanitize_file_name($filename), 'post_content' => '', 'post_status' => 'inherit' ); $attach_id = wp_insert_attachment( $attachment, $file, $post_id ); require_once(ABSPATH . 'wp-admin/includes/image.php'); $attach_data = wp_generate_attachment_metadata( $attach_id, $file ); $res1= wp_update_attachment_metadata( $attach_id, $attach_data ); $res2= set_post_thumbnail( $post_id, $attach_id ); } 

http://codex.wordpress.org/Function_Reference/wp_upload_dir

http://codex.wordpress.org/Function_Reference/wp_insert_attachment


EDIT: добавлено создание пути

http://codex.wordpress.org/Function_Reference/wp_mkdir_p

Попробуйте использовать set_post_thumbnail() .

Редактировать Отто: Вы уточнили свой вопрос, поэтому я уточню ответ, который дал Чип.

В принципе, вам нужно также создать «приложение» для сообщения. Когда изображение загружается в медиа-библиотеку WordPress, для него создается специальная запись с добавлением типа сообщения. Это приложение привязано к определенной записи через идентификатор post_parent.

Поэтому, если вы знаете идентификатор вложения, то вызов set_post_thumbnail с почтовым объектом или идентификатором, а идентификатор вложения просто устанавливает флаг миниатюр сообщений.

Если вы еще не создали приложение, вам нужно будет сделать это в первую очередь. Самый простой способ сделать это с помощью wp_insert_attachment() . Эта функция принимает массив из нескольких параметров, имя файла (файл уже должен находиться в соответствующем каталоге загрузок) и идентификатор сообщения родительского сообщения, к которому вы хотите вставить вложение.

Просто наличие файла, загруженного и прикрепленного к сообщению, ничего не делает автоматически. Это просто своего рода механизм категоризации. Например, механизм галереи использует прикрепленные изображения сообщения для создания [галереи] для этой записи. Миниатюра для сообщения – это только одно из прикрепленных изображений, которое должно быть миниатюрой.

Более подробную информацию о том, как использовать wp_insert_attachment, можно найти в кодексе (см. Выше).

set_post_thumbnail() – лучшая функция для этого требования.

Я думаю, вы найдете идентификатор вложения через get_children() или get_posts() . Результат имеет массив и внутри этого массива – идентификатор. Следующий пример для тестирования; надеюсь это работает; пишите без тестов, только на месте.

Для вашего требования важно, чтобы вы изменили get_the_ID() с вашим post-ID ; верните идентификатор вложения, и вы можете использовать foth set_post_thumbnail() .

 $attachments = get_children( array( 'post_parent' => get_the_ID(), 'post_type' => 'attachment', 'post_mime_type' => 'image' ) ); foreach ( $attachments as $attachment_id => $attachment ) { echo wp_get_attachment_image($attachment_id); } 

Я хотел бы улучшить ответ Robs, используя основные функции WP download_url и media_handle_sideload

 <?php /** * Downloads an image from the specified URL and attaches it to a post as a post thumbnail. * * @param string $file The URL of the image to download. * @param int $post_id The post ID the post thumbnail is to be associated with. * @param string $desc Optional. Description of the image. * @return string|WP_Error Attachment ID, WP_Error object otherwise. */ function Generate_Featured_Image( $file, $post_id, $desc ){ // Set variables for storage, fix file filename for query strings. preg_match( '/[^\?]+\.(jpe?g|jpe|gif|png)\b/i', $file, $matches ); if ( ! $matches ) { return new WP_Error( 'image_sideload_failed', __( 'Invalid image URL' ) ); } $file_array = array(); $file_array['name'] = basename( $matches[0] ); // Download file to temp location. $file_array['tmp_name'] = download_url( $file ); // If error storing temporarily, return the error. if ( is_wp_error( $file_array['tmp_name'] ) ) { return $file_array['tmp_name']; } // Do the validation and storage stuff. $id = media_handle_sideload( $file_array, $post_id, $desc ); // If error storing permanently, unlink. if ( is_wp_error( $id ) ) { @unlink( $file_array['tmp_name'] ); return $id; } return set_post_thumbnail( $post_id, $id ); } 

Просто нашел это и сделал его намного проще, работает, но я не скруббер безопасности

 if(!empty($_FILES)){ require_once( ABSPATH . 'wp-admin/includes/post.php' ); require_once( ABSPATH . 'wp-admin/includes/image.php' ); require_once( ABSPATH . 'wp-admin/includes/file.php' ); require_once( ABSPATH . 'wp-admin/includes/media.php' ); $post_ID = "your post id!"; $attachment_id = media_handle_upload( 'file', $post_ID ); set_post_thumbnail( $post_ID, $attachment_id ); } 

просто или что? после получения правильных файлов WordPress обрабатывает носитель и загружает его, а затем устанавливает его как миниатюру.