wp_insert_post ()를 사용할 때 이미지 URL로 추천 이미지 (썸네일)를 어떻게 설정하나요?
5 대답
- 투표
-
- 2012-02-05
이미지가 미디어 라이브러리에있을 때 게시물 미리보기 이미지로 설정할 수 있습니다. 미디어 라이브러리에 이미지를 추가하려면 이미지를 서버에 업로드해야합니다. 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
<시간>수정 : 추가 된 경로 생성
You can set an image as post thumbnail when it is in your media library. To add an image in your media library you need to upload it to your server. WordPress already has a function for putting images in your media library, you only need a script that uploads your file.
Usage:
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:
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: Added path creation
-
당신의 노력에 감사드립니다!이것은 $ upload_dir [ 'basedir'] (경로가 아닌)를 사용할 때만 작동합니다. 왜냐하면 편집 후 인터페이스를 통해 첨부 파일을 검사 할 때 $ upload_dir [ 'path'동안 .../uploads/FILENAME.EXT로 참조되기 때문입니다.]는 .../uploads/2012/02/FILENAME.EXT와 같은 곳에 저장합니다. 어떻게 든 파일이 참조되는 방식을 변경하는 것이 더 나을 수도 있지만 방법은 모르겠습니다.Thank you for your efforts! This only works when using $upload_dir['basedir'] (rather than path) though, because when I inspect the attachment through the post edit interface it is referenced as .../uploads/FILENAME.EXT while $upload_dir['path'] would store it in something like .../uploads/2012/02/FILENAME.EXT. It might be even better to somehow change how the file is referenced, but I wouldn't know how.
- 0
- 2012-02-06
- Chris
-
내 대답에 경로 생성을 추가했습니다.Added path creation in my answer.
- 1
- 2012-02-06
- Rob Vermeer
-
빠른 답변에 감사드립니다 :).그러나 여전히 동일한 결과를 얻습니다. 여기에 내 문제를 보여주는 스크린 샷이 있습니다 : http://i.imgur.com/iKTNs.png.상단 섹션은 상황을 확인하기 위해 조건부에 에코를 배치 한 결과입니다.Appreciate your quick response :). I still get the same result however, here's a screenshot displaying my problem: http://i.imgur.com/iKTNs.png . The upper section is the result of placing an echo in your conditional, just to see what's going on.
- 0
- 2012-02-06
- Chris
-
다시 변경하여 wp_insert_attachment 및 wp_generate_attachment_metadata에 전체 경로를 전달하지 않았습니다.이것이 문제를 해결할 수 있기를 바랍니다.Changed it again, didn't pass the full path to wp_insert_attachment and wp_generate_attachment_metadata. Hope this will solve the problem.
- 0
- 2012-02-06
- Rob Vermeer
-
완벽하게 작동합니다. 정말 감사합니다!또한 잘못된 경로 (이미지가 표시 되더라도)로 인해 발생한 크기 문제도 해결되었습니다.이보다 더 좋을 수는 없습니다!Works flawlessly, thank you so much! This has also fixed a sizing issue, which was apparently caused by incorrect paths (even though the image would show up). Couldn't be any better!
- 0
- 2012-02-06
- Chris
-
훌륭한 코드에 감사드립니다.내 CSV 가져 오기와 함께 작동하려면 하나의 수정 만 필요했으며 이미지 파일이 고유하게 유지되도록 파일 이름 앞에postid를 추가했습니다.Thanks for your great code. Only one amendment was needed to get it to work with my CSV import and that was prepending the postid to the filename to ensure the image files remain unique.
- 0
- 2012-12-07
- Dave Hilditch
-
저도 칭찬에 힘 쓰겠습니다.이 코드 스 니펫을 좋아하십시오.시간을 절약 해주셔서 감사합니다!Let me also heap on the praise. Love this snippet of code. Thanks for saving me hours!
- 0
- 2013-02-11
- bkwdesign
-
그냥 궁금해 : 이것이 안전한가요?누군가가 이미지를 위장 할 위험이 있습니까,아니면 wp_check_filetype ()이 처리합니까?Just wondering: Is this safe? Is there a risk of someone disguising an image, or does wp_check_filetype() take care of that?
- 0
- 2015-02-14
- LOLapalooza
-
위의 코드를 사용하여 포스트 슬러그 (수천 개의 포스트를 실행하는 경우 시간이 많이 소요됨)라는 이름의 추천 이미지를 얻기 위해 약간 수정했습니다. `코드`I used the code above and slightly amended to get featured images which are named as the post slug (which is quite time consuming if you run thousands of posts): `code`
- 0
- 2017-01-19
- Traveler
-
`php.ini`에서`allow_url_fopen`이 비활성화 된 경우 URL에`file_get_contents`를 사용하면 작동하지 않습니다.다른 WP 환경usage of `file_get_contents` with a URL will not work if `allow_url_fopen` is disabled in `php.ini` - [`wp_remote_get`](https://codex.wordpress.org/Function_Reference/wp_remote_get) will be more highly compatible across different WP environments
- 0
- 2017-02-24
- highvolt
-
경고 :이 답변은 파일 이름이 같으면 다시 작성하므로주의하십시오.$post_id 또는 최소한 uniqid ()를 사용하여 이름을 생성해야합니다.Warning: This answer rewrites the file if it has the same name, beware. It should generate names using $post_id or at least uniqid()
- 1
- 2017-05-31
- Ivan Castellanos
-
이것을 사용할 때 "업로드"에서 생성 된 이미지의 파일 크기는 0입니다.When I use this, the images created in "uploads" have a file size of zero.
- 0
- 2018-03-23
- PJ Brunet
-
- 2016-03-02
WP 핵심 기능
download_url
을 활용하여 Robs 답변을 개선하고 싶습니다. 및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 ); }
I'd like to improve Robs answer by utilizing the WP core functions
download_url
andmedia_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 ); }
-
WordPress 기본 기능을 사용하는 것이 가장 좋은 방법입니다. 감사합니다.Using the WordPress native functions are the best practice, Thank you.
- 1
- 2018-09-15
- Mostafa Soufi
-
어떤 이유로이 버전에서 "유효한 URL이 제공되지 않았습니다."라는 오류가 발생했습니다.,반면 [Rob Vermeer의 답변] (https://wordpress.stackexchange.com/a/41300/122391)이 작동했습니다.For some reason, this version gave me errors saying "A valid URL was not provided." , whereas [Rob Vermeer's answer](https://wordpress.stackexchange.com/a/41300/122391) worked.
- 0
- 2019-08-28
- Flimm
-
- 2012-01-26
set_post_thumbnail()
을 사용해보세요.Otto 편집 : 질문을 명확히 하셨으므로 Chip이 제공 한 응답을 명확히하겠습니다.
기본적으로 게시물에 대한 '첨부'도 만들어야합니다. 이미지가 WordPress 미디어 라이브러리에 업로드되면 게시물 유형의 첨부 파일과 함께 특수 게시물 항목이 만들어집니다. 이 첨부 파일은post_parent 식별자를 통해 특정 게시물에 연결됩니다.
따라서 첨부 파일의 ID를 알고있는 경우 게시물 개체 또는 ID와 첨부 파일 ID로 set_post_thumbnail을 호출하면 게시물 썸네일 플래그가 설정됩니다.
아직 첨부 파일을 생성하지 않았다면 먼저 생성해야합니다. 이를 수행하는 가장 쉬운 방법은
wp_insert_attachment()
를 사용하는 것입니다. 이 함수는 몇 가지 매개 변수,파일 이름 (파일이 이미 적절한 업로드 디렉토리에 있어야 함) 및 첨부 파일을 첨부 할 상위 게시물의 게시물 ID의 배열을 사용합니다.파일을 업로드하고 게시물에 첨부하는 것만으로는 자동으로 아무 작업도 수행되지 않습니다. 이것은 단순히 일종의 분류 메커니즘입니다. 예를 들어 갤러리 메커니즘은 게시물의 첨부 된 이미지를 사용하여 해당 게시물의 [갤러리]를 구축합니다. 게시물의 썸네일은 썸네일로 설정된 첨부 이미지 중 하나입니다.
wp_insert_attachment 사용 방법에 대한 자세한 정보는 코덱스 (위 링크)에서 찾을 수 있습니다.
Try using
set_post_thumbnail()
.Edit by Otto: You clarified your question, so I'll clarify the response Chip gave.
Basically, you need to make the 'attachment' for the post as well. When an image is uploaded into the WordPress media library, a special post entry is made for it with a post type of attachment. This attachment is linked to some specific post via the post_parent identifier.
So if you know the ID of the attachment, then calling set_post_thumbnail with the post object or ID and the attachment ID will simply set the post thumbnail flag.
If you have not created the attachment yet, then you will need to do that first. Easiest way to do that is with
wp_insert_attachment()
. This function takes an array of a few parameters, the filename (the file must already be in the proper uploads directory), and the post ID of the parent post that you want to attach the attachment to.Just having a file uploaded and attached to a post doesn't do anything automatically. This is simply a sort of categorization mechanism. The gallery mechanism, for example, uses the attached images of a post to build the [gallery] for that post. A thumbnail for a post is just one of the attached images which has be set to be the thumbnail.
More info on how to use wp_insert_attachment can be found in the codex (linked above).
-
당신의 답변에 감사드립니다!그래도 축소판 ID를 검색하려면 어떻게해야합니까?이미지 URL로 시작하고 있는데 어떻게 든 다른 기능을 사용하여 워드 프레스 라이브러리에 이미지를 추가해야한다고 생각합니까?Thank you for your reply! How would I retrieve the thumbnail ID, though? I'm starting out with an image URL, so I guess I should somehow add an image to the wordpress library using another function?
- 0
- 2012-01-27
- Chris
-
이미 게시물을 * 삽입 *하고 있으므로 삽입하려는 게시물에 이미 * 이미지를 첨부 *했다고 가정했습니다.유효한 가정이 아닙니까?As you are already *inserting* a post, I had assumed that you were already *attaching images* to the post you're inserting. Is that not a valid assumption?
- 0
- 2012-01-27
- Chip Bennett
-
죄송합니다. URL로 게시물에 실제로 이미지를 첨부하는 방법을 아직 찾지 못했습니다.또한 게시물 자체에 이미지가 실제로 표시되는 것을 원하지 않습니다.저는 현재 $thumbnail_id를 반환하는 함수를 찾고 있으며,업로드 디렉토리에 첨부 파일이 있어야한다는 것을 알 때까지 wp_insert_attachment ()가 작동 할 것이라고 생각했습니다.URL로 이미지 파일을 얻는 방법을 모르고 이것이 내가 찾는 기능인지 확실하지 않습니다.도와 주셔서 감사합니다!Sorry, but I have not yet found out how to actually attach images to a post by URL. Also, I would not want the image to actually be displayed in the post itself. I'm currently looking for the function which will return the $thumbnail_id, and thought that maybe wp_insert_attachment() would work, until I noticed it already required the attachment to be in the upload directory. I don't know how to get an image file there by its URL, and I'm not sure whether this is the function I'm looking for in the first place. Thank you for your help!
- 0
- 2012-01-27
- Chris
-
수행하려는 작업을 더 잘 설명하기 위해이 정보로 ** 질문을 다시 작성 ** 해 주시겠습니까?(또는 게시물을 삽입 할 때 첨부 파일 ID를 얻는 방법을 묻는 메시지를 그대로두고 새 질문을 시작 하시겠습니까?)Can you please **rewrite your question** with this information, to better-describe what you're trying to accomplish? (Or, leave this one as-is, and start a new question, to ask how to get the attachment ID when inserting a post?)
- 0
- 2012-01-27
- Chip Bennett
-
원래 질문이 수정되고 부분적으로 수정되었습니다. 다시 확인하세요. :).The original question has been edited and partly rephrased, please check back :).
- 0
- 2012-01-27
- Chris
-
- 2012-02-06
set_post_thumbnail()
이이 요구 사항에 가장 적합한 함수입니다.get_children()
<을 통해 첨부 파일의 ID를 찾을 수 있습니다./a> 또는get_posts()
. 결과에는 배열이 있으며이 배열 안에 ID가 있습니다. 테스트를위한 다음 예; 나는 그것이 효과가 있기를 바랍니다. 테스트없이 처음부터 작성하세요.요구 사항에 따라
get_the_ID()
로post-ID
를 변경하는 것이 중요합니다. 첨부 파일의 ID를 반환하면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); }
set_post_thumbnail()
is the best function for this requirement.I think, you find the ID of an attachment via
get_children()
orget_posts()
. The result have an array and inside this array is the ID. The follow example for testing; i hope it works; write without tests, only on scratch.For your requirement it is important, that you change
get_the_ID()
with yourpost-ID
; return the ID of the Attachment and this can you use fothset_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); }
-
- 2015-02-20
방금 찾아서 훨씬 더 간단하게 만들었지 만 작동하지만 저는 보안 스크러버가 아닙니다
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가 미디어를 처리하고 업로드 한 다음 미리보기 이미지로 설정합니다.
Just found this and made it much simpler, works but I'm no security scrubber
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 ); }
simple or what? after getting the right files, wordpress will handle the media and upload it, then set it as a thumbnail.
wp_insert_post ()에 대한 함수 참조 항목 을 살펴 보는 동안 필요한 배열에 매개 변수가 없음을 발견했습니다. 내 테마에서 게시물 미리보기 이미지 로 표시되는 게시물의 '추천 이미지'를 설정할 수 있습니다.
베넷 씨가 제안한 set_post_thumbnail () 과 같은 기능을 살펴 봤지만 WordPress 자체 및 WordPress 코덱에 비교적 새로운 추가. 따라서 $thumbnail_id 매개 변수를 획득하고 제공하는 방법을 설명하는 소스를 찾을 수 없습니다. 이것이 정말로 사용할 함수라면,내가 가진 것이 이미지 URL뿐일 때 유효한 $thumbnail_id 매개 변수를 어떻게 제공 할 수 있습니까?
미리 감사합니다!