REST API का उपयोग करके कस्टम पोस्ट मेटा कैसे प्राप्त करें


9

मैं अपनी wordpress वेबसाइट के लिए REST API बनाने की कोशिश कर रहा हूँ जो कि wordpress job manager प्लगइन का उपयोग करके सुविधा लिस्टिंग के लिए उपयोग किया जाता है।

मैंने अपनी कस्टम पोस्ट, टैक्सोनोमीज़ इन \ प्लग-इन \ रेस्ट-एपी \ प्लगइन। एफपी।

नीचे एपीआई मुझे डिफ़ॉल्ट प्रतिक्रिया के साथ सभी लिस्टिंग देता है।

http: // localhost / खेल / WP-json / WP / v2 / joblisting /

मैं नीचे दिए गए कोड का उपयोग करके JSON प्रतिक्रिया में पोस्ट मेटा जोड़ना चाहता था।

function slug_register_phone_number() {
            register_rest_field( 'job_listing',
                'phone',
            array(
                'get_callback' => 'slug_get_phone_number',
                'update_callback' => null,
                'schema' => null,
            )
        );
    }

    function slug_get_phone_number($post, $field_name, $request) {
        return get_post_meta($post->id, '_phone' );
    }
}

उपरोक्त कोड का उपयोग करके मैं "फोन" को REST प्रतिक्रिया के रूप में जोड़ने में सक्षम हूं लेकिन मुझे हमेशा प्रतिक्रिया में फोन = गलत मिल रहा है। यह wp_postmeta तालिका से सही डेटा नहीं दिखा रहा है।

मैंने संदर्भ के लिए नीचे दिए गए लिंक का अनुसरण किया है।

http://v2.wp-api.org/extending/modifying/

विवरण में प्लग। 1. WP नौकरी प्रबंधक 2. बाकी-एपीआई

कोई भी मदद वास्तव में मददगार होगी।


आप "झूठा" कहाँ देखते हैं? क्या आपने जाँच की है कि वास्तव में ब्राउज़र के नेटवर्क टूल के साथ "वायर" पर क्या चल रहा है?
मार्क कप्लून

हाय मैं JSON में एक प्रतिक्रिया के रूप में हो रही है।
हरि सोनी

मैं इस सेवा को हिट करने के लिए क्रोम प्लगइन पोस्टमैन का उपयोग कर रहा हूं। मैं किसी भी तरह के प्रमाणीकरण का उपयोग नहीं कर रहा हूं। यह अनुरोध शरीर में किसी भी डेटा के बिना एक साधारण एपीआई अनुरोध है।
हरि सोनी

तो फिर आप कैसे जानते हैं कि आप वास्तव में सही पोस्ट को ट्रिगर करते हैं? क्या आप भी उस कॉलबैक में आते हैं?
मार्क कप्लून

मैं PHP और wordpress के लिए नया हूँ। मैं JAVA के साथ लंबे समय से काम कर रहा हूं। क्या आप मुझे बता सकते हैं कि मैं कैसे जांच सकता हूं कि मेरा फ़ंक्शन कहा जाता है या नहीं? मैंने पोस्ट ऑब्जेक्ट को प्रिंट करने की कोशिश की, लेकिन मूल्य देखने में सक्षम नहीं था ..
हरि सोनी

जवाबों:


6

$postमें कॉलबैक फ़ंक्शन एक सरणी, नहीं एक वस्तु है। तो आप उपयोग नहीं कर सकते $post->id। इसे बदलें $post['id']और इसे काम करना चाहिए:

function slug_get_phone_number($post, $field_name, $request)
{
    return get_post_meta($post['id'], '_phone', true);
}

मैं परिवर्तन की सलाह देते हैं _phoneकरने के लिए phone_numberकुछ और या अंडरस्कोर उपसर्ग के बिना। क्योंकि _अक्सर निजी मेटा कुंजी के साथ प्रयोग किया जाता है। _अपने पोस्ट में सीधे उपसर्ग के साथ मेटा कुंजी वाली एक कस्टम फ़ील्ड जोड़ने का प्रयास करें , आप देखेंगे कि मेरा क्या मतलब था।


16

WP API में एक rest_prepare_postफ़िल्टर है (या rest_prepare_CPTयदि आप कस्टम पोस्ट के साथ काम कर रहे हैं) जिसका उपयोग आप JSON प्रतिक्रिया को संशोधित करने के लिए कर सकते हैं। आपके मामले में यह होगा rest_prepare_joblisting

function filter_joblisting_json( $data, $post, $context ) {
$phone = get_post_meta( $post->ID, '_phone', true );

if( $phone ) {
    $data->data['phone'] = $phone;
}

return $data;
}
add_filter( 'rest_prepare_joblisting', 'filter_joblisting_json', 10, 3 );

उसी फ़िल्टर का उपयोग करके आप प्रतिक्रिया से फ़ील्ड / डेटा भी निकाल सकते हैं और डेटा का कोई भी हेरफेर कर सकते हैं।


+1 जैसा कि ओपी को लगता है कि यह अलग-अलग अनुरोधों में प्रत्येक जानकारी प्राप्त करने की कोशिश करने से बेहतर तरीका है।
मार्क कप्लून

यह समाधान मेरे लिए पूरी तरह से काम करता है
आसिफ

2

बस इस तरीके को function.php में जोड़ें

add_action( 'rest_api_init', 'create_api_posts_meta_field' );

function create_api_posts_meta_field() {

 // register_rest_field ( 'name-of-post-type', 'name-of-field-to-return', array-of-callbacks-and-schema() )
 register_rest_field( 'tour', 'metaval', array(
 'get_callback' => 'get_post_meta_for_api',
 'schema' => null,
 )
 );
}

function get_post_meta_for_api( $object ) {
 //get the id of the post object array
 $post_id = $object['id'];

 //return the post meta
 return get_post_meta( $post_id );
}

0

यहाँ एक OOP उदाहरण है:

class MetaDataFetcher{

    public function enableAPIroute(){
        add_action ('rest_api_init', array($this, 'doRegisterRoutes'));
    }

    public function doRegisterRoutes(){
        register_rest_route(
            'yournamespace/vXX',
            'fetch-post-meta',
            array(
                'methods'               => array('GET','POST'),
                'callback'              => array($this, 'returnMetaData'),

                //You should have a better auth, or this endpoint will be exposed
                permission_callback'   => function(){return TRUE;}
        );
    }

    public function returnMetaData(){
        if (!(isset($_REQUEST['post-id']))){
            return "ERROR: No post ID";
        }
        $postID = $_REQUEST['post-id'];
        $meta = get_post_meta($postID);
        $meta = json_encode($meta);
        return $meta;
    }
}

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