Skip to content

Instantly share code, notes, and snippets.

@s-hiroshi
Created November 24, 2015 21:31
Show Gist options
  • Save s-hiroshi/3477e07454d809b9d38f to your computer and use it in GitHub Desktop.
Save s-hiroshi/3477e07454d809b9d38f to your computer and use it in GitHub Desktop.
/*
* WP REST API version 2.0-beta7
* API base url ishttp://www.example.com/wp-json
*
* Reference
* https://wordpress.org/support/topic/new-post-with-image
*/
/*
* Get Guzzle HTTP Client. That client has been authenticated.
*/
$client = ...
/*
* Get binary data of image.
* $path is file path to be uploaded.
*/
$handle = fopen($path, 'r');
$fdata = fread($handle, filesize($path));
/*
* Post media.
* Request to WP REST API media endpoint
*/
$response = $client->request(
'POST',
'wp/v2/media',
[
'multipart' => [
[
'name' => 'file',
'contents' => $fdata,
'filename' => basename($path),
],
],
);
@DanielKoohmarey
Copy link

DanielKoohmarey commented Jul 10, 2021

For anyone looking for a python script with media property support:

from requests_toolbelt.multipart.encoder import MultipartEncoder
import requests
import os

def upload_img_wp(imgPath):
    fileName = os.path.basename(imgPath)
    multipart_data = MultipartEncoder(
        fields={
            # a file upload field
            'file': (fileName, open(imgPath, 'rb'), 'image/jpg'),
            # plain text fields
            'alt_text': 'alt test',
            'caption': 'caption test',
            'description': 'description test'
        }
    )

    res = requests.post('http://example.com/wp-json/wp/v2/media', data=multipart_data,
                             headers={'Content-Type': multipart_data.content_type},
                             auth=('user', 'pass'))

    id = 0
    link = ''
    if res.status_code == 201:
        id = res.json()['id']
        link = res.json()['guid']["rendered"]
        #id may be used to set 'featured_media' field of created post
    else:
        print("Unexpected status code: {}".format(response.status_code))

    return id, link

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment