我正在使用Wordpress XML-RPC自动发布到我的博客,我从PHP得到了这两个功能:wp.newPost和wp.uploadFile。
然而,当我在一个PHP脚本中运行它们时,如下所示:(只包括重要部分)当我尝试发布即使attachment_id存在时,Wordpress也没有检测到wp.uploadFile中的attachment_id。
//wp.newPost content
$content = array(
'post_title' => $title,
'post_content' => $body,
'post_status' => 'publish',
'post_type' => 'products',
'post_thumbnail' = // wp.uploadFile is called here that returns attachement id
);
$this->Curl->post($url,$content);
当我尝试运行上面的代码时,我得到:“faultCode 404 faultString无效的附件ID。”
我验证了wp.uploadFile图像已成功上传并在Wordpress库中显示。实际上,如果我再次运行脚本并将'post_thumbnail'值替换为wp.uploadFile返回的完全相同的attachement_id,它就可以工作!
因此,如果我如上所示同时运行这两个函数,显然Wordpress没有检测到图像已被上传。这有什么解决方案吗?我真的很讨厌将Wordpress附件id存储在我自己的数据库中。
答案 0 :(得分:2)
通过xmlrpc发布我正在使用IXR
require_once("IXR_Library.php.inc");
以下是我正在使用的;它肯定需要一些编辑,但可能会给你一些线索
上传新文件:
$file_upload_path = get_post_meta ( $image->ID,'_wp_attached_file', false);
$file_path = $_SERVER['DOCUMENT_ROOT']."/dev/0.2/wp-content/uploads/".$file_upload_path[0];
$path_parts = pathinfo($file_path);
$file_name = $path_parts['filename'].'.'.$path_parts['extension'];
$data = array(
'name' => $file_name ,
'type' => $image->post_mime_type ,
'bits' => new IXR_Base64( file_get_contents( $file_path ) ) ,
'overwrite' => true
);
$status = $rpc->query(
'wp.uploadFile',
'1',
$username,
$password,
$data
);
$image_returnInfo = $rpc->getResponse();
创建新帖子:
$data = array(
'post_title' => $post->post_title,
'post_content' => $post->post_content . $attachement_string_hack,
'post_type' => 'product',
'post_status' => 'publish',
'dateCreated' => (new IXR_Date(time())),
'post_thumbnail' => $image_returnInfo['id']
);
$rpc = new IXR_Client( $rpc_url );
$res = $rpc->query('wp.newPost', '', $username, $password, $data, 0);
希望这有帮助! (我现在坚持将图像附加到帖子上)