如何在使用wp_sert_post()时按图像URL设置特色图像(缩略图)?

时间:2012-01-26 作者:Chris

在查看function reference entry for wp_insert_post(), 我注意到,它所需的数组中没有参数,允许我为帖子设置“特色图片”,显示为post thumbnail 在我的主题中。

我研究了以下函数set_post_thumbnail(), 正如Bennett先生所建议的,但这似乎是WordPress本身和WordPress codex的一个相对较新的补充。因此,我找不到任何可以解释如何获取和提供$thumbnail\\u id参数的来源。如果这真的是要使用的函数,那么当我只有一个图像URL时,我如何才能为它提供一个有效的$thumbnail\\u id参数?

提前感谢!

5 个回复
最合适的回答,由SO网友:Rob Vermeer 整理而成

当图像位于媒体库中时,可以将其设置为后期缩略图。要在媒体库中添加图像,需要将其上载到服务器。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


编辑:添加了路径创建

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

SO网友:Jan Beck

我想通过利用WP的核心功能来改进Robs的答案download_urlmedia_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 );

}

SO网友:Chip Bennett

尝试使用set_post_thumbnail().

奥托编辑:你澄清了你的问题,所以我会澄清芯片给出的回答。

基本上,你也需要为帖子制作“附件”。当图像上传到WordPress媒体库时,会为其创建一个特殊的post条目,并带有post类型的附件。此附件通过post\\u父标识符链接到某些特定的post。

因此,如果您知道附件的ID,那么使用post对象或ID和附件ID调用set\\u post\\u thumbnail只需设置post缩略图标志。

如果尚未创建附件,则需要先创建附件。最简单的方法是wp_insert_attachment(). 此函数接受由几个参数组成的数组、文件名(文件必须已经在正确的上载目录中)以及要将附件附加到的父帖子的帖子ID。

仅仅上传一个文件并将其附加到帖子并不会自动完成任何操作。这只是一种分类机制。例如,图库机制使用帖子的附加图像为该帖子构建[图库]。帖子的缩略图只是已设置为缩略图的附加图像之一。

有关如何使用wp\\U insert\\U附件的更多信息,请参阅codex(如上链接)。

SO网友:bueltge

set_post_thumbnail() 是满足此要求的最佳功能。

我想,你可以通过get_children()get_posts(). 结果有一个数组,数组中是ID;我希望它能起作用;无需测试即可写入,只需从头开始。

对于您的需求,您必须改变get_the_ID() 与您的post-ID; 返回附件的ID,您可以使用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);
}

SO网友:Jesse Baker

刚找到这个,让它简单多了,很管用,但我不是安全洗涤器

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将处理媒体并将其上载,然后将其设置为缩略图。

结束

相关推荐