问题:下面代码能够成功插入文章(post), 但是不能正常设置文章的Featured Image(特色图像/缩略图),代码如下:
en: How to set featured image using wp_insert_post?
// Auto post ( Unique File Date ).
$postData = array(
'post_category' => array( $Category ),
'post_status' => $Post_Status,
'post_type' => $Post_Type
);
$post_id = wp_insert_post( $postData );
$getImageFile = 'http://localhost/Multisite/test2/wp-content/uploads/sites/4/Auto Post/twitter.png';
$attach_id = wp_insert_attachment( $postData, $getImageFile, $post_id );
require_once( ABSPATH . 'wp-admin/includes/image.php' );
$attach_data = wp_generate_attachment_metadata( $attach_id, $getImageFile );
wp_update_attachment_metadata( $attach_id, $attach_data );
set_post_thumbnail( $post_id, $attach_id );
这是怎么回事呢?
最佳解决方案:
需要使用不同的$postData作为附件。
代码如下:
1. 先导入相关依赖:
require("/usr/share/nginx/html/xxxx". '/wp-load.php'); //注:/usr/share/nginx/html/xxxx是你的wordpress部署地址。
require_once( "/usr/share/nginx/html/xxxx" . '/wp-admin/includes/image.php' );
2. 然后按指定格式设置缩略图(特色图像):
$wp_filetype = wp_check_filetype( $getImageFile, null );
$attachment_data = array(
'post_mime_type' => $wp_filetype['type'],
'post_title' => sanitize_file_name( $getImageFile ),
'post_content' => '',
'post_status' => 'inherit'
);
$attach_id = wp_insert_attachment( $attachment_data, $getImageFile, $post_id );
只有这样正确设置附件插入函数wp_insert_attachment的参数,才能正确设置Featured Image。
3. 绑定缩略图附件到文章。
//$attach_data = wp_generate_attachment_metadata( $attach_id, $getImageFile ); //注:不需要!
//wp_update_attachment_metadata( $attach_id, $attach_data ); //注:不需要!
//"只需要下面这行就可了!!!!!!"
set_post_thumbnail( $post_id, $attach_id );
值得一提的是,上面的代码整理之后,结合wordpress函数
wp_insert_post
和wordpress函数:
set_post_thumbnail
就可以完成自动批量给wordpress插入文章并设置缩略图。
附1:wp_inset_post的参数说明
post = array(
'ID' => [ <post id> ] //需要更新的文章编号
'menu_order' => [ <order> ] //如果新文章是页面,设置显示顺序
'comment_status' => [ 'closed' | 'open' ] // 评论的状态,'closed'关闭评论.
'ping_status' => [ 'closed' | 'open' ] // ping的状态,'closed' 关闭 pingbacks和trackbacks
'pinged' => [ ? ] //该文章被ping到的地址
'post_author' => [ <user ID> ] //作者编号
'post_category' => [ array(<category id>, <...>) ] //文章归类数组
'post_content' => [ <the text of the post> ] //文章内容,必填
'post_date' => [ Y-m-d H:i:s ] //文章编辑日期
'post_date_gmt' => [ Y-m-d H:i:s ] //文章编辑GMT日期
'post_excerpt' => [ <an excerpt> ] //摘要信息
'post_name' => [ <the name> ] // (slug) 文章别名
'post_parent' => [ <post ID> ] //新文章的父文章编号
'post_password' => [ ? ] //文章浏览密码
'post_status' => [ 'draft' | 'publish' | 'pending'| 'future' | 'private' ] //新文章的状态
'post_title' => [ <the title> ] //文章标题,必填
'post_type' => [ 'post' | 'page' | 'link' | 'nav_menu_item' | custom post type ] //文章类型:文章、页面、链接、菜单、其他定制类型
'tags_input' => [ '<tag>, <tag>, <...>' ] //标签字符串
'to_ping' => [ ? ] //该文章需要ping到的地址
'tax_input' => [ array( 'taxonomy_name' => array( 'term', 'term2', 'term3' ) ) ] // 附加注释数组 );
需要特别说明的是,参宿tags_input是直接填写标签中文(或英文)即可,数据wp_inset_post会通过wordpress数据看来做去重并转化为关联ID。
本文由《纯净的天空》整理自网路。
【参考文献】
[1] http://stackoverflow.com/questions/28166651/set-featured-image-using-wp-insert-post
[2] http://www.cnblogs.com/xbdeng/p/5545180.html