REST APIを使用したメディアのアップロード


9

JSON REST APIを使用してWordPressサイトにメディアをアップロードするときに問題が発生します。

次のコードを使用して写真をアップロードできますが、名前も含めて情報が割り当てられていません。実際、名前は自動的にURLとファイル名になります(拡張子なし)。

$username = "ZX";
$password = "ZX";
$host = 'http://ZX.com/wp-json/wp/v2/media';
$data = json_encode($data);
$file = '/Users/xx.png';
$imagedata  = file_get_contents($file);
$process = curl_init($host); 
curl_setopt($process, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($process, CURLOPT_BINARYTRANSFER, TRUE);
curl_setopt($process, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($process, CURLOPT_TIMEOUT, 50);
curl_setopt($process, CURLOPT_USERPWD, $username . ":" . $password);
curl_setopt($process, CURLOPT_POSTFIELDS, $data);
curl_setopt($process, CURLOPT_HTTPHEADER, array('Content-Type:image/png','Content-Disposition:attachment;filename='.$file));
$return = curl_exec($process);
print_r($return);

次のようなデータをアップロードにどのように割り当てますか?

$data = array(
  "status" => "draft",
  "title" => "Photo media",       
  "description" => "Photo media1",
  "media_type" => "image",
  "alt_text" => "alternate text"
  );

回答:


3

これはAPI経由では不可能です。自分画像フェッチし、自分APIにデータを送信する必要があります。ブロッククォート

–これは、@ Dan(削除済み)の回答で言及されているGitHub–issueで Ryan 引用しています。

画像をサイドロードする方法

media_sideload_image()戻り値ものインスタンスである可能性があることに注意してください\WP_Error。次に、それを投稿に添付するだけです。これは非常に簡単です。

$media = media_sideload_image( 
    'http://i.imgur.com/bcJvAj0.jpg', 
    $post->ID, 
    'Some image description', 
    'src'
);

if ( ! empty( $media ) and ! is_wp_error( $media ) ) {
    // reference new image to set as featured
    $attachments = get_posts( [
        'post_type'      => 'attachment',
        'posts_per_page' => 1,
        'post_status'    => 'any',
        'post_parent'    => $post->ID,
    ] );

    if ( is_array( $attachments ) ) {
        set_post_thumbnail( $post->ID, $attachments[0]->ID );
    }

    // Test print our image. The return value is the src of the sideloaded image.
    printf( '<img src="%s" />', $media );
}

内部

APIを使用する必要がある理由を説明する、コア全体の短いバックトレース:

のソースmedia_sideload_image()を見て、のラッパーをdownload_url()内部で使用していることを確認してください。これは、非常に安全でデバッグ可能で使いやすい一方で、WP API全体を提供することを意味します。の戻り値はの結果であり、考えられるすべての場所が考慮され(十分な数があります)、場所が書き込み可能であることを確認します。すべての必要な添付ファイルデータとメタデータを生成します。wp_safe_remote_get()\WP_HTTP::get()download_url()wp_tempnam()/tmpmedia_handle_sideload()


引用された質問はどれですか?この方法はまだ有効ですか?
Brethlosze

見積もりの​​更新とGitHub–Issueリンクを参照してください。そしてなぜそれは有効ではないのですか?もう一度確認したい場合は、内部の線に沿ってウサギの穴をたどって、現在のWPバージョンをここにリンクされているコードと比較してください。それはそれほど難しいことではありません。
カイザー

この回答は2016年からです。2019年の時点では、REST APIがmediaオブジェクトへのファイルのアップロードを処理できないことを確認したいだけなので、WP関数に集中できます。
Brethlosze

@Brethlosze私が言ったように:コアコードの周りであなた自身を見てください。現在、WPで作業しているわけではないので、そのトピックに関する最新情報はありません。
カイザー、
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.