首页 文章

将图像附加到Wordpress XMLRPC中的帖子

提问于
浏览
6

我正在使用XMLRPC来发布Wordpress的帖子 . 我在发布缩略图时遇到问题,在调试wordpress代码后,我发现我的问题是由于图像没有附加到帖子这一事实引起的 . 我必须这样做而不需要修补wordpress或使用PHP,只需要使用XMLRPC .

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

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

if ( $thumbnail_html = wp_get_attachment_image( $thumbnail_id, 'thumbnail' ) )

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

3 回答

  • 7

    是的,可以这样做,如果Wordpress版本是3.5或更高,当使用代码上传文件/图像时,您可以设置post_id . 我用于特色图片的新帖子的流程如下:

    • 使用newPost函数并发布没有特色图像的内容,并将发布设置为false,记录由此返回的post_id

    • 上传图片并将post_id设置为刚发布的帖子的id,记录image_id

    • 完成后编辑帖子并将wp_post_thumbnail设置为等于刚刚上传的image_id,并将发布设置为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

    $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);
    
  • 0

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

    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

    这是我的版本,在 WordPress 3.4 上添加了wp.newPostwp.editPost,允许使用 custom post types .

    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('
    <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('
    <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('
    <strong>Something went wrong editPost - '.$client->getErrorCode().' : '.$client->getErrorMessage().'<br >'); } } }

相关问题