【问题标题】:Using Wordpress XML-RPC wp.uploadFile and wp.newPost from PHP使用来自 PHP 的 Wordpress XML-RPC wp.uploadFile 和 wp.newPost
【发布时间】:2012-11-26 21:14:10
【问题描述】:

我正在使用 Wordpress XML-RPC 自动发布到我的博客,我使用 PHP 获得了这两个函数:wp.newPost 和 wp.uploadFile。

但是,当我在一个 php 脚本中运行它们时,如下所示:(仅包括重要部分)当我尝试发布时,即使附件 ID 存在,Wordpress 也不会从 wp.uploadFile 检测附件 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 Invalid attachment ID.”

我确认 wp.uploadFile 图像已成功上传并显示在 Wordpress 库中。事实上,如果我再次运行该脚本并将“post_thumbnail”值替换为 wp.uploadFile 返回的完全相同的 attachement_id,它就可以工作!

所以,如果我如上所示同时运行这两个函数,Wordpress 显然不会检测到图像已上传。有什么解决办法吗?我真的很讨厌将 Wordpress 附件 ID 存储在我自己的数据库中。

【问题讨论】:

    标签: php wordpress xml-rpc


    【解决方案1】:

    通过 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);
    

    希望这会有所帮助! (我现在坚持将图片附加到帖子中)

    【讨论】:

    • 我让它工作了,这是我的正则表达式的问题。无论如何感谢您的帮助。
    • 您使用的主题是否允许您将图像附加为帖子?如果是这样,请手动将图像附加到帖子,然后检查 wp_postmeta 表中的 meta_key 是什么,然后以这种格式在 $data 的 custom_fields 中使用该键: $data = array('custom_fields' => array(array('key' => 'meta_key_name', 'value' => '你的图片网址'));
    • Walter - 谢谢,我需要附加图像,以便它们在媒体库中显示为“附加”:我需要通过 xmlrpc 访问帖子父列。显然,从我昨晚的最后一次阅读来看,它在当前版本的 wp (3.4.2) 中不可用
    • 以防万一您在图像附件方面遇到类似问题:wp 需要 22335 补丁;根据这张票core.trac.wordpress.org/ticket/22335
    猜你喜欢
    • 2012-02-10
    • 1970-01-01
    • 2012-03-07
    • 1970-01-01
    • 2013-09-12
    • 2012-11-02
    • 1970-01-01
    • 2011-11-13
    • 1970-01-01
    相关资源
    最近更新 更多