问题描述
在浏览 function reference entry for wp_insert_post()的同时,我注意到数组中没有任何参数,这将允许我设置一个帖子的’Featured Image’,在我的主题中显示为 post thumbnail 。
我已经研究了像 Bennett 先生的建议的 set_post_thumbnail()这样的功能,但这似乎是 WordPress 本身和 WordPress 的一个比较新的补充。因此,没有任何来源可以找到哪些解释如何获取和提供 $ thumbnail_id 参数。如果这真的是使用的功能,当我所有的都是一个图像 URL 时,我可以以什么方式提供一个有效的 $ thumbnail_id 参数?
提前致谢!
最佳解决方案
您可以将图像设置为您的媒体库中的缩略图。要在媒体库中添加图像,您需要将其上传到您的服务器。 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
次佳解决方案
尝试使用 set_post_thumbnail()
。
Otto 编辑:你澄清了你的问题,所以我将澄清 Chip 给出的回应。
基本上,您还需要使’attachment’ 成为该职位。当图像上传到 WordPress 媒体库中时,会使用后缀类型的附件进行特殊的条目。此附件通过 post_parent 标识符链接到某些特定的帖子。
所以如果你知道附件的 ID,那么使用 post 对象或 ID 和附件 ID 调用 set_post_thumbnail 就可以简单地设置 post thumbnail 标志。
如果您尚未创建附件,那么您需要首先执行。最简单的方法是用 wp_insert_attachment()
。此函数需要一个数组的几个参数,文件名 (该文件必须在适当的 uploads 目录中),以及要附加附件的父帖子的帖子 ID 。
只需将文件上传并附加到帖子就不会自动执行任何操作。这只是一种分类机制。例如,图库机制使用附件的帖子来构建该帖子的。帖子的缩略图只是附加图像之一,已被设置为缩略图。
有关如何使用 wp_insert_attachment 的更多信息,可以在 codex(上面链接) 中找到。
第三种解决方案
我想通过使用 WP 核心功能 download_url
和 media_handle_sideload
来改善 Robs 的答案
<?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 );
}
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。