对主题目录中的文件使用media_sideload_Image

时间:2015-04-04 作者:LocNguyen

我正在建立一个Wordpress网站,管理员可以从post metabox上传视频文件。

在那篇帖子被保存并且视频文件被附加到帖子之后,我使用ffmpeg在视频的第一秒获取屏幕截图,然后将这个屏幕截图作为JPG文件保存在主题目录的“tmp”目录中。

最后,我想以编程方式将此屏幕截图制作为后期特色图像。我使用media\\u sideload\\u image函数,它通常用于从另一台服务器获取图像,并将该图像设置为后期特色图像,我认为此函数也可以在这种情况下使用。

在我的例子中,视频截图已成功保存到我的主题目录中的“tmp”目录,但media\\u sideload\\u图像部分没有返回任何内容以供进一步处理。以下是我的功能:

function create_video_featured_image($post_id, $image_uri) {

// $image_uri = \'http://localhost/demo-site/wp-content/themes/mytheme/tmp/video_thumb_952.jpg\';
$media = media_sideload_image($image_uri, $post_id);

if(!empty($media) && !is_wp_error($media)){
    $args = array(
        \'post_type\' => \'attachment\',
        \'posts_per_page\' => -1,
        \'post_status\' => \'any\',
        \'post_parent\' => $post_id
    );

    // reference new image to set as featured
    $attachments = get_posts($args);

    if(isset($attachments) && is_array($attachments)){
        foreach($attachments as $attachment){
            // grab source of full size images (so no 300x150 nonsense in path)
            $image = wp_get_attachment_image_src($attachment->ID, \'full\');
            // determine if in the $media image we created, the string of the URL exists
            if(strpos($media, $image[0]) !== false){
                // if so, we found our image. set it as thumbnail
                set_post_thumbnail($post_id, $attachment->ID);
                // only want one image
                break;
            }
        }
    }
}
}
我是否遗漏了什么,或者在这种情况下是否有其他解决方法?

非常感谢!

2 个回复
SO网友:Domain

请在使用media\\u sideload\\u image()之前包含以下文件,以便其正常工作,

require_once(ABSPATH . \'wp-admin/includes/media.php\');
require_once(ABSPATH . \'wp-admin/includes/file.php\');
require_once(ABSPATH . \'wp-admin/includes/image.php\');
参考号,WP Codex: media_sideload_image

SO网友:Marcello Curto

不需要遍历所有附件,因为如果将“ID”作为第四个参数传递,则media\\u sideload\\u image函数将返回附件ID。

然后可以简化为以下内容:

function create_video_featured_image($post_id, $image_uri) {    
$image_uri = \'http://localhost/demo-site/wp-content/themes/mytheme/tmp/video_thumb_952.jpg\';
$media_id = media_sideload_image($image_uri, $post_id, null, \'id\');
set_post_thumbnail($post_id, $media_id);
}

结束

相关推荐

将文件直接上传到媒体库wp-Content\\Uploads

我想使用自动过程复制\\wp content\\uploads\\中的非WordPress文件夹,并在媒体库中自动注册文件。我可以使用这样一个过程来上传文件,然后使用Add From Server注册它们(http://wordpress.org/plugins/add-from-server/) 或FTP中的类似介质。但这似乎是过度的人力投入。LR/博客(http://www.photographers-toolbox.com/products/lrblog.php) 似乎能够保存到WP并同时注册文件。