首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Wordpress XMLRPC中将图像附加到post

在Wordpress XMLRPC中将图像附加到post
EN

Stack Overflow用户
提问于 2013-07-18 19:53:44
回答 3查看 8.8K关注 0票数 7

我正在使用XMLRPC来发布到Wordpress。我在发布缩略图时遇到了问题,在调试wordpress代码后,我发现我的问题是由于图像没有附加到帖子上造成的。我必须在不打wordpress补丁或使用PHP的情况下做到这一点,只使用XMLRPC。

我可以上传一张图片并获取该图片的ID。另一点让我困惑的是,你如何将一张图片附加到你还没有发布的帖子上,因为你等待图片上传?我应该上传图像然后发布,然后使用图像id和帖子id更新图像元数据?

编辑: wordpress中有问题的代码是这个检查

代码语言:javascript
复制
if ( $thumbnail_html = wp_get_attachment_image( $thumbnail_id, 'thumbnail' ) )

我的假设是它失败了,因为镜像是独立的,如果我修复了代码,一切都很好,但我无法修补我的应用程序用户的WP (所以这不是一个解决方案)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-07-22 23:18:06

是的,如果Wordpress的版本是3.5或更高,当你使用上传文件/图像的代码时,你可以设置post_id。我用来发布带有特色图片的新帖子的流程如下:

  1. 使用newPost函数发布没有特色图像的内容,并将publish设置为false,记录此

返回的post_id

  1. 上传图像并将post_id设置为刚发布的帖子的id,完成编辑帖子后记录image_id
  2. 并将wp_post_thumbnail设置为您刚刚上传的image_id,还将publish设置为true(如果需要)

重要: mime类型很重要,它必须是"image/jpg“或"image/png”请参阅文档,如果mime类型像"jpg“一样工作,则附加将失败。

提示:对于调试,如果你从wordpress得到一个一般性的错误,你不知道为什么你可以检查wordpress代码甚至编辑它,添加调试/跟踪调用,希望你能找出原因。

这是一个包含类别、图片和标签的帖子示例。它需要class-IXR.php

https://github.com/WordPress/WordPress/blob/master/wp-includes/class-IXR.php

和mime_content_type函数

https://github.com/caiofior/storebaby/blob/master/magmi/plugins/extra/general/socialnotify/wp/mimetype.php

代码语言:javascript
复制
        $client = new IXR_Client($url);
        $content = array(
            'post_status' => 'draft',
            'post_type' => 'post',
            'post_title' => 'Title',
            'post_content' => 'Message',
             // categories ids
            'terms' => array('category' => array(3))
        );
        $params = array(0, $username, $password, $content);
        $client->query('wp.newPost', $params);
        $post_id = $client->getResponse();

        $content = array(
            'name' => basename('/var/www/sb/img.jpeg'),
            'type' => mime_content_type('/var/www/sb/img.jpeg'),
            'bits' => new IXR_Base64(file_get_contents('/var/www/sb/img.jpeg')),
            true
        );
        $client->query('metaWeblog.newMediaObject', 1, $username, $password, $content);
        $media = $client->getResponse();
        $content = array(
            'post_status' => 'publish',
            // Tags
            'mt_keywords' => 'tag1, tag2, tag3',
            'wp_post_thumbnail' => $media['id']
        );
        $client->query('metaWeblog.editPost', $post_id, $username, $password, $content, true);
票数 9
EN

Stack Overflow用户

发布于 2015-08-17 19:33:55

如果您只想使用wp.newPost和wp.editPost,我的版本

代码语言:javascript
复制
include_once( ABSPATH . WPINC . '/class-IXR.php' );
include_once( ABSPATH . WPINC . '/class-wp-http-ixr-client.php' );

    $usr = 'username_on_the_server_side';
    $pwd = 'password_on_the_server_side';
    $xmlrpc = 'server side xmlrpc.php url';
    $client = new IXR_Client($xmlrpc);

    ////////////  IMAGE UPLOAD AND ATTACHMENT POST CREATION  ///////////
       $img_attach = 'link to the image';
       $img_attach_content = array(
                'name' => basename($img_attach),
                'type' => mime_content_type($img_attach),
                'bits' => new IXR_Base64(file_get_contents($img_attach)),
                        );
        $status = $client->query( 'wp.uploadFile','1',  $usr, $pwd, $img_attach_content );
        $image_returnInfo = $client ->getResponse();

   ////////////  POST CREATION  ///////////

        $custom_fields = array( 
                          array( 'key' => 'blabla1', 'value' => 'blabla1_value' ),
                          array( 'key' => 'blabla12', 'value' => 'blabla1_value2')
                          ); 
        $post_content = array(
            'post_type' => 'post',
            'post_status' => 'draft', //for now
            'post_title' => 'XMLRPC Test',
            'post_author' => 3,
            'post_name' => 'XMLRPC Test',
            'post_content' => 'XMLRPC Test Content',
            'custom_fields' => $custom_fields
        );

    $res = $client -> query('wp.newPost',1, $usr, $pwd, $post_content);
    $postID =  $client->getResponse();
    if(!$res)
        echo 'Something went wrong....';
    else {
            echo 'The Project Created Successfully('.$res.')<br>Post ID is '.$postID.'<br>';
    }

   ////////////  Image Post Attachment Edit  ///////////
      $img_attach_content2 = array(
                'post_type'  => 'attachment',   
                'post_status' => 'inherit', 
                'post_title' => $postID, 
                'post_name' => $postID, 
                'post_parent'  => $postID,
                'guid'    => $image_returnInfo['url'],
                'post_content'   => '',
                'post_mime_type' => 'image/jpg'
                 );

     $res2 = $client -> query('wp.editPost', 0, $usr, $pwd,      $image_returnInfo['id'], $img_attach_content2);

    $postIDimg =  $client->getResponse();    

    ////////////   POST EDIT  ///////////

      $post_content2 = array(
                 'post_status' => 'publish', //publish
                'wp_post_thumbnail' => $image_returnInfo['id'],
                'custom_fields' =>    array( 'key' => '_thumbnail_id', 'value' =>  $image_returnInfo['id'] ) 
            );
            $media2= $client->query('wp.editPost',0, $usr, $pwd, $postID, $post_content2);
票数 1
EN

Stack Overflow用户

发布于 2014-06-26 00:15:02

这是我的版本,使用wp.newPostwp.editPost,在WordPress 3.4上添加,允许使用自定义post类型

代码语言:javascript
复制
require_once("IXR_Library.php.inc");
$title = 'My title';
$body = 'My body';
$category="category1, category2"; // Comma seperated pre existing categories. Ensure that these categories exists in your blog.
$keywords="keyword1, keyword2, keyword3";
$customfields=array('key'=>'Author-bio', 'value'=>'Autor Bio Here'); // Insert your custom values like this in Key, Value format

$title = htmlentities($title,ENT_NOQUOTES,@$encoding);
$keywords = htmlentities($keywords,ENT_NOQUOTES,@$encoding);

$content = array(
    'post_title'=>$title,
    'post_content'=>$body,
    'post_type'=>'some_custom_post_type',
    'post_status' => 'draft', // http://codex.wordpress.org/Post_Status
    'mt_allow_comments'=>0, // 1 to allow comments
    'mt_allow_pings'=>0, // 1 to allow trackbacks
    'mt_keywords'=>$keywords,
    'categories'=>array($category),
    'custom_fields' => array($customfields)
);

// Create the client object
$client = new IXR_Client('http://example.com/xmlrpc.php');
$username = "wp_username";
$password = "wp_username_password";

$params = array(0,$username,$password,$content,true); // Last parameter is 'true' which means post immediately, to save as draft set it as 'false'

if (!$client->query('wp.newPost', $params)) {
    die('<br/><strong>Something went wrong - '.$client->getErrorCode().' : '.$client->getErrorMessage().'<br >');

    }
else
{   
    $post_id = $client->getResponse();
    echo 'Inserted with id'.$post_id;
    $picture = '/full/path/to/pic.jpg';
    $content = array(
        'name' => basename($picture),
        'type' => mime_content_type($picture),
        'bits' => new IXR_Base64(file_get_contents($picture)),
        true
    );
    if (!$client->query('metaWeblog.newMediaObject', 1, $username, $password, $content)) {
        die('<br/><strong>Something went wrong - newMediaObject'.$client->getErrorCode().' : '.$client->getErrorMessage().'<br >');
    }
    else
    {
        $media = $client->getResponse();
        $content = array(
            'post_status' => 'publish',
            'post_thumbnail' => $media['id']
        );
        if (!$client->query('wp.editPost', 0, $username, $password,  $post_id, $content)) {
            die('<br/><strong>Something went wrong editPost - '.$client->getErrorCode().' : '.$client->getErrorMessage().'<br >');
        }
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17722743

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档