web-dev-qa-db-ja.com

メディアをアップグレードする REST API

JSON REST AP​​Iを使用して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"
  );
9

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

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

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

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_safe_remote_get() のラッパーである \WP_HTTP::get() を使用しています。これは、WP AP​​I全体を提供すると同時に、非常に安全でデバッグ可能で使いやすいことを意味します。 download_url()の戻り値は、 wp_tempnam() の結果です。これは、考えられるすべての/tmpロケーションを考慮し(十分な数がある)、ロケーションが書き込み可能であることを確認します。 media_handle_sideload() は、必要なすべての添付データとメタデータを生成します。

3
kaiser