WP आराम एपीआई: एक अनुरोध में विशेष रुप से मीडिया यूआरएल सहित नवीनतम पोस्ट का विवरण?


15

मैं पोस्ट जानकारी प्राप्त करने के लिए wp-rest एपीआई का उपयोग कर रहा हूं । मैं खेतों को फ़िल्टर करने और परिणाम को सारांशित करने के लिए wp बाकी एपीआई फिल्टर आइटम का उपयोग करता हूं :

जब मैं कहता हूं http://example.com/wp-json/wp/v2/posts?items=id,title,featured_mediaकि यह इस तरह से परिणाम देता है:

[

    {
        "id": 407,
        "title": {
            "rendered": "Title 1"
        },
        "featured_media": 399
    },
    {
        "id": 403,
        "title": {
            "rendered": "Title 2"
        },
        "featured_media": 401
    }

]

सवाल यह है कि मैं इस आईडी का उपयोग करके फ़ीचर्ड मीडिया url कैसे बना सकता हूं? डिफ़ॉल्ट कॉलिंग से http://example.com/wp-json/wp/v2/media/401एक नया जसन मिलता है जिसमें स्रोत छवि के विभिन्न आकारों के यूआरएल के बारे में सभी विवरण हैं:

{

    "id": 401,
    "date": "2016-06-03T17:29:09",
    "date_gmt": "2016-06-03T17:29:09",
    "guid": {
        "rendered": "http://example.com/wp-content/uploads/my-image-name.png"
    },
    "modified": "2016-06-03T17:29:09",
    "modified_gmt": "2016-06-03T17:29:09",
    "slug": "my-image-name",
    "type": "attachment",
    "link": "http://example.com/my-post-url",
    "title": {
        "rendered": "my-image-name"
    },
    "author": 1,
    "comment_status": "open",
    "ping_status": "closed",
    "alt_text": "",
    "caption": "",
    "description": "",
    "media_type": "image",
    "mime_type": "image/png",
    "media_details": {
        "width": 550,
        "height": 250,
        "file": "my-image-name.png",
        "sizes": {
            "thumbnail": {
                "file": "my-image-name-150x150.png",
                "width": 150,
                "height": 150,
                "mime_type": "image/png",
                "source_url": "http://example.com/wp-content/uploads/my-image-name-150x150.png"
            },
            "medium": {
                "file": "my-image-name-300x136.png",
                "width": 300,
                "height": 136,
                "mime_type": "image/png",
                "source_url": "http://example.com/wp-content/uploads/my-image-name-300x136.png"
            },
            "one-paze-port-thumb": {
                "file": "my-image-name-363x250.png",
                "width": 363,
                "height": 250,
                "mime_type": "image/png",
                "source_url": "http://example.com/wp-content/uploads/my-image-name-363x250.png"
            },
            "one-paze-blog-thumb": {
                "file": "my-image-name-270x127.png",
                "width": 270,
                "height": 127,
                "mime_type": "image/png",
                "source_url": "http://example.com/wp-content/uploads/my-image-name-270x127.png"
            },
            "one-paze-team-thumb": {
                "file": "my-image-name-175x175.png",
                "width": 175,
                "height": 175,
                "mime_type": "image/png",
                "source_url": "http://example.com/wp-content/uploads/my-image-name-175x175.png"
            },
            "one-paze-testimonial-thumb": {
                "file": "my-image-name-79x79.png",
                "width": 79,
                "height": 79,
                "mime_type": "image/png",
                "source_url": "http://example.com/wp-content/uploads/my-image-name-79x79.png"
            },
            "one-paze-blog-medium-image": {
                "file": "my-image-name-380x250.png",
                "width": 380,
                "height": 250,
                "mime_type": "image/png",
                "source_url": "http://example.com/wp-content/uploads/my-image-name-380x250.png"
            },
            "full": {
                "file": "my-image-name.png",
                "width": 550,
                "height": 250,
                "mime_type": "image/png",
                "source_url": "http://example.com/wp-content/uploads/my-image-name.png"
            }
        },
        "image_meta": {
            "aperture": "0",
            "credit": "",
            "camera": "",
            "caption": "",
            "created_timestamp": "0",
            "copyright": "",
            "focal_length": "0",
            "iso": "0",
            "shutter_speed": "0",
            "title": "",
            "orientation": "0",
            "keywords": [ ]
        }
    },
    "post": 284,
    "source_url": "http://example.com/wp-content/uploads/my-image-name.png",
    "_links": {
        "self": [
            {
                "href": "http://example.com/wp-json/wp/v2/media/401"
            }
        ],
        "collection": [
            {
                "href": "http://example.com/wp-json/wp/v2/media"
            }
        ],
        "about": [
            {
                "href": "http://example.com/wp-json/wp/v2/types/attachment"
            }
        ],
        "author": [
            {
                "embeddable": true,
                "href": "http://example.com/wp-json/wp/v2/users/1"
            }
        ],
        "replies": [
            {
                "embeddable": true,
                "href": "http://example.com/wp-json/wp/v2/comments?post=401"
            }
        ]
    }

}

लेकिन मामले पर विचार करें जब मैं पदों और उनके थंबनेल की सूची प्राप्त करना चाहता हूं। एक बार मुझे कॉल करना चाहिए http://example.com/wp-json/wp/v2/posts?items=id,title,featured_mediaफिर मुझे http://example.com/wp-json/wp/v2/media/idप्रत्येक मीडिया आईडी के लिए 10 बार कॉल करना चाहिए और फिर परिणामों को पार्स करना चाहिए और मीडिया थंबनेल का अंतिम यूआरएल प्राप्त करना चाहिए। इसलिए इसे 10 पोस्ट (सूची के लिए एक, थंबनेल के लिए 10) का विवरण प्राप्त करने के लिए 11 अनुरोध की आवश्यकता है। क्या एक अनुरोध में यह परिणाम प्राप्त करना संभव है?


1
क्या आपने register_rest_field के साथ अपनी प्रतिक्रिया के लिए एक नया फ़ील्ड पंजीकृत किया है?
बेनोती

@Benoti मैं इसके प्रलेखन की जाँच करूँगा। अगर पूछने के लिए और चीजें थीं तो मैं आपके पास वापस आऊंगा :)
वीएसबी

यह सही है, आपने पोस्ट अनुरोध में छवि दिनांक नहीं दी है, केवल फ़ीचर्ड मीडिया की आईडी और WP एपीआई के डिफ़ॉल्ट पर एक नया अनुरोध आवश्यक है।
bueltge

यदि आप _embedपैरामीटर जोड़ते हैं , तो लौटी हुई पोस्ट ऑब्जेक्ट में फ़ीचर्ड मीडिया के बारे में सभी विवरण और उसके सभी आकार उपलब्ध हैं। एक उदाहरण के लिए मेरी प्रतिक्रिया की जाँच करें।
जेसुक्स फ्रेंको

जवाबों:


18

आह मैं सिर्फ अपने आप को यह समस्या थी! और जब तक _embedमहान है, मेरे अनुभव में यह बहुत धीमा है, और JSON का बिंदु तेज होना है: D

मेरे पास एक प्लगइन में निम्न कोड है (कस्टम पोस्ट प्रकार जोड़ने के लिए उपयोग किया जाता है), लेकिन मुझे लगता है कि आप इसे अपनी थीम की function.phpफ़ाइल में रख सकते हैं ।

php

add_action( 'rest_api_init', 'add_thumbnail_to_JSON' );
function add_thumbnail_to_JSON() {
//Add featured image
register_rest_field( 
    'post', // Where to add the field (Here, blog posts. Could be an array)
    'featured_image_src', // Name of new field (You can call this anything)
    array(
        'get_callback'    => 'get_image_src',
        'update_callback' => null,
        'schema'          => null,
         )
    );
}

function get_image_src( $object, $field_name, $request ) {
  $feat_img_array = wp_get_attachment_image_src(
    $object['featured_media'], // Image attachment ID
    'thumbnail',  // Size.  Ex. "thumbnail", "large", "full", etc..
    true // Whether the image should be treated as an icon.
  );
  return $feat_img_array[0];
}

अब आपकी JSON प्रतिक्रिया में आपको एक नया फ़ील्ड देखना चाहिए जिसे "featured_image_src":थंबनेल में url कहा जाता है ।

यहाँ प्रतिक्रियाओं को संशोधित करने के बारे में और पढ़ें:
http://v2.wp-api.org/extending/modifying/

और यहाँ बारे में अधिक जानकारी है register_rest_fieldऔर wp_get_attachment_image_src()कार्य:
1.) https://developer.wordpress.org/reference/functions/register_rest_field/
2.) https://developer.wordpress.org/reference/functions/wp_get_attachment_image_src/

** नोट: <?php ?>अगर यह एक नया php फ़ाइल है तो टैग न भूलें !


2
यह बहुत अच्छा काम करता है और मदद करता है कि _embed का उपयोग करने की आवश्यकता नहीं है क्योंकि मैं केवल फुलसाइज चित्रित छवि चाहता हूं। मुझे इसे बदलना पड़ा: ($object['featured_media'], 'fullsize', false);मुझे थंबनेल url नहीं देने के लिए, लेकिन फ़ंक्शन के माध्यम से पूरी तरह से काम करता है। php - धन्यवाद!
जॉर्डन

1
आरईएस एपीआई एंडपॉइंट के साथ यह सभी जुगलिंग मुझे याद दिलाता है कि मुझे ग्राफ़कॉइल क्यों पसंद है और यह कि मुझे रीस्ट एपीआई और नए कस्टम रिज़ॉल्वर के रैपर्स को खत्म करना चाहिए ;-) वैसे भी, यह एक चतुर समाधान है और वास्तव में मैं डेटा प्राप्त करने के लिए उत्पादन में कस्टम समापन बिंदुओं का उपयोग करता हूं। मुझे जरूरत है (और बस)।
जेसुको फ्रेंको

नई प्लगइन है, http://mahditajik.ir/wp-json/wp/v2/media/<id>लेकिन इसमें कई अतिरिक्त डेटा हैं जो प्रतिक्रिया को धीमा कर देते हैं ताकि मैं REST एपीआई प्रतिक्रिया को कैसे अनुकूलित कर सकूं?
महदी

1
बहुत बहुत धन्यवाद, इसने मेरी विशेषताओं सामग्री को पूरा करने में मेरी मदद की! : D
Atem18

1
मैं आपको यह बताना चाहता हूं कि मेरे लोडिंग समय में से यह 2 कट है! बहुत बहुत धन्यवाद और आपके ध्यान से कटा हुआ ग्रंथ सूची के लिए!
19

7

बस _embedपोस्ट के लिए पूछ रहे URL तर्क को जोड़ दें , और हर पोस्ट ऑब्जेक्ट, ऑब्जेक्ट को शामिल करेगा _embedded.[wp:featuredmedia], जिसमें /media/$idसंसाधन की तरह ही सभी चित्र शामिल हैं । यदि आप एक विशिष्ट आकार चाहते हैं, तो बस इसे इसके संपत्ति के नाम से एक्सेस करें, अर्थात: _embedded[wp:featuredmedia][0].media_details.sizes.full.source_urlया इसके थंबनेल के लिए:_embedded[wp:featuredmedia][0].media_details.sizes.thumbnail.source_url

अर्थात, wp: फ़ीमेडिया एम्बेडेड ऑब्जेक्ट में आपके पोस्ट के लिए उपलब्ध हर आकार के सभी URL और विवरण शामिल हैं, लेकिन यदि आप मूल रूप से चित्रित छवि चाहते हैं, तो आप इस कुंजी में मान का उपयोग कर सकते हैं: post._embedded["wp:featuredmedia"][0].source_url

मैं इसे कुछ इस तरह से साइट में उपयोग करता हूं (अपने डोमेन का उपयोग करें, निश्चित रूप से):

$.get('https://example.com/wp-json/wp/v2/posts/?categories=3&_embed', 
    function(posts) { 
        var elems = '';
        posts.forEach(function(post){ 
            var link = post.link;
            var title = post.title.rendered;
            var pic = post._embedded["wp:featuredmedia"][0].source_url);
            elems += '<div class="this_week"><a href="' + link + '" target="_blank">';
            elems += '<img src="' + pic + '" title="' + title + '"/><span class="title">';
            elems += title + '</span></a></div>';
        });
        $('#blockbusters').html(elems);
    });
});

देख? दो प्रश्नों के लिए कोई ज़रूरत नहीं है, बस _embedएक क्वेरी तर्क के रूप में जोड़ें , और फिर आपके पास सभी जानकारी है जो आपको अपने दृष्टिकोण के लिए सबसे अच्छे आकार का उपयोग करने की आवश्यकता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.