如何将帖子的精选图片发送到API?

时间:2021-06-04 作者:Roshan Chapagain

我目前正在制作一个插件,用于接收帖子并将其数据发送到rest API。其他一切都进展顺利。但我很困惑我如何才能为特色图片做到这一点。我必须上传一个文件,而不是url。基本上,API接受多部分/表单数据,并有一个HTTP请求方法PUT。

该方法当前看起来如下所示:

public function uploadFeaturedImage($post_id)
{   
    $url = build_api_url(\'posts/\' . $post_id. \'/photo\');
    
    $featured_image_url = get_the_post_thumbnail_url($post_id);
    $image_data =  // Get featured image file here

    $data = array(
        \'file\' => $image_data
    );

    $args = array(
        \'method\' => \'PUT\',
        \'headers\' => array(\'Content-Type\' => \'multipart/form-data\', \'Authorization\' => \'Bearer <token>\' ),
        \'body\' => $data
    );


    $response = wp_remote_request($url,$args);

    return $response[\'body\'];

}

2 个回复
SO网友:CoderSantosh

下面是一个在API上发送特征图像(文件数据)并将图像设置为服务器上的特征图像的想法。

使用以下函数从URL获取文件数据:

/*fetch the file from URL*/
function prefix_get_file_data_from_url( $url ) {
    $response = wp_remote_get( $url );
    if ( is_array( $response ) && ! is_wp_error( $response ) ) {
        return wp_remote_retrieve_body( $response );
    }
    return \'\';
}
获取文件后,将其发送到服务器。

在服务器端,您需要以下功能来上载文件并将其设置为特色图像。

SO网友:Roshan Chapagain

不知道这是不是一个好方法。但我用curl解决了这个问题。

public function uploadFeaturedImage($post_id)
{

    $api_id = $this->get_api_id($post_id);

    $url = blog_transporter_build_api_url(\'posts/\' . $api_id . \'/photo\');

    $image_url = get_the_post_thumbnail_url($post_id);

    if (empty($image_url)) return false;

    $image_id = get_post_thumbnail_id($post_id);
    $mime_type = get_post_mime_type($image_id);

    $data = array(\'file\' => new CURLFile(
        $image_url,
        $mime_type,
        \'featured-image\'
    ));

    $headers = array(\'Authorization: Bearer <token>\' , \'Content-Type: multipart/form-data\');

    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT");
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    curl_setopt($ch, CURLINFO_HEADER_OUT, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

    $response = curl_exec($ch);
    return $response;
}

相关推荐

如何使用WooCommerce在React.js主题中呈现WP REST-API端点

我正在使用React构建一个电子商务Wordpress/Woocommerce主题。js。我正在使用npm软件包:create-react-wptheme此包直接在索引内部呈现react应用程序。wordpress主题的php。我不确定如何访问react中的wordpress api端点。js组件。我已经使用jsx为站点创建了模板,需要访问api端点来呈现动态内容。我可以使用对外部api的http请求访问这些点,但我需要能够访问react wp主题内的完整api。据我所知,我需要使用主干。js api客户