REST API'siyle ortam yükleme


9

JSON REST API ile bir WordPress sitesine medya yüklerken sorun yaşıyorum.

Aşağıdaki kodla fotoğrafları yükleyebilirim, ancak onlara hiçbir bilgi atanmadı, ad bile değil - aslında ad otomatik olarak URL ve dosya adı olur (uzantı olmadan).

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

Yüklemelere aşağıdakiler gibi verileri nasıl atayabilirim?

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

Yanıtlar:


3

API ile bu mümkün değildir; görüntüyü kendiniz almanız ve verileri API'ya kendiniz göndermeniz gerekir . blockquote

- Bu, Ryan'ı @Dan (silindi) cevabında bahsedilen GitHub sorunu hakkında aktarır.

Görüntüleri yandan yükleme

media_sideload_image()Dönüş değerinin de bir örneği olabileceğini unutmayın \WP_Error. Daha sonra bir gönderiye eklemeniz yeterlidir, ki bu oldukça basittir:

$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 );
}

İç kısımlar

Neden API'ya bağlı kalmanız gerektiğini açıklayan kısa bir geri izleme:

Kaynağına bir göz atın media_sideload_image()kullandığı görmek download_url(), içten hangi kullanımları wp_safe_remote_get()için bir sarım \WP_HTTP::get(). Bu, oldukça güvenli, hata ayıklanabilir ve kullanımı kolay olmakla birlikte tüm WP API'sını sunduğu anlamına gelir. Dönüş değeri, olası tüm konumları dikkate alan (bol miktarda var) ve konumunuzun yazılabilir olmasını sağlayan download_url()sonucudur . Gerekli tüm bağlantı verilerini ve meta verilerini oluşturur.wp_tempnam()/tmpmedia_handle_sideload()


Atıfta bulunulan soru hangisidir? Bu yöntem hala geçerli mi?
19:20

Alıntıdaki güncelleme ve GitHub – Sorun bağlantısına bakın. Ve neden geçerli olmaz? Tekrar kontrol etmek istiyorsanız, tavşan deliğini The internals çizgileri boyunca takip edin ve mevcut WP-versiyonunu buraya bağlanan kodla karşılaştırın. O kadar da zor değil.
Kaiser

Bu yanıt 2016'dan geldiğinden emin olmak istiyorum. 2019'dan itibaren, REST API'sının dosyalara medianesneler yüklemekle başa çıkamayacağından emin olmak istiyorum , bu nedenle biri WP işlevlerine odaklanabilir.
Brethlosze

@Brethlosze dediğim gibi: Lütfen çekirdek kod etrafında kendinize bir göz atın. Şu anda WP ile çok fazla çalışmıyorum, bu konuda herhangi bir taze bilgi yok.
Kaiser
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.