REST API के साथ मीडिया अपलोड करना


9

JSON REST API के साथ वर्डप्रेस साइट पर मीडिया अपलोड करते समय मुझे परेशानी हो रही है।

निम्नलिखित कोड के साथ मैं फ़ोटो अपलोड कर सकता हूं, लेकिन कोई भी जानकारी उन्हें नहीं सौंपी गई है, यहां तक ​​कि नाम भी नहीं - वास्तव में नाम स्वचालित रूप से 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

यह एपीआई के माध्यम से संभव नहीं है; आपको स्वयं छवि प्राप्त करने की आवश्यकता है , और डेटा को स्वयं एपीआई में भेजें। Blockquote

- यह @Dan (हटाए गए) उत्तर में उल्लेखित गिटहब मुद्दे पर रियान को उद्धृत करता है

छवियों को कैसे लोड करें

ध्यान दें कि 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 );
}

आंतरिक

कोर के माध्यम से एक छोटा बैक ट्रेस जो बताता है कि आपको एपीआई के साथ क्यों रहना चाहिए:

आंतरिक स्रोत का media_sideload_image()उपयोग करता है download_url(), जो उपयोग करता है wp_safe_remote_get(), के लिए एक आवरण को देखने के स्रोत पर एक नज़र डालें \WP_HTTP::get()। इसका मतलब है कि यह संपूर्ण WP एपीआई प्रदान करता है, जबकि यह काफी सुरक्षित, डीबग करने योग्य और उपयोग में आसान है। का रिटर्न मान download_url()उसी का परिणाम है wp_tempnam(), जो सभी संभावित /tmpस्थानों को ध्यान में रखता है (बहुत सारे हैं) और यह सुनिश्चित करता है कि आपका स्थान लेखन योग्य हैmedia_handle_sideload()सभी आवश्यक लगाव डेटा और मेटा डेटा उत्पन्न होगा।


उद्धृत प्रश्न कौन सा है? क्या यह तरीका अभी भी मान्य है?
ब्रेथोल्ज़े

अपडेट देखें और उद्धरण में GitHub- जारी करें लिंक। और यह मान्य क्यों नहीं होगा? यदि आप फिर से जांच करना चाहते हैं, तो बस इंटर्नल की तर्ज पर खरगोश के छेद का अनुसरण करें और यहां लिंक किए गए कोड के साथ वर्तमान WP-संस्करण की तुलना करें। यह उतना कठिन नहीं है।
केसर

क्योंकि यह उत्तर 2016 से है। मैं केवल यह सुनिश्चित करना चाहता हूं कि 2019 तक, REST API mediaवस्तुओं में फ़ाइलों को अपलोड करने से निपट नहीं सकती है , इसलिए कोई भी WP फ़ंक्शन पर ध्यान केंद्रित कर सकता है।
ब्रेथलॉज़

@Brethlosze जैसा कि मैंने कहा: कृपया कोर कोड के चारों ओर अपने लिए एक नज़र डालें। मुझे उस विषय पर कोई ताज़ा जानकारी नहीं है क्योंकि मैं अभी WP के साथ काम नहीं कर रहा हूँ।
केसर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.