কীভাবে আরএসটি এপিআই ব্যবহার করে কাস্টম পোস্ট মেটা পাবেন


9

আমি আমার ওয়ার্ডপ্রেস ওয়েবসাইটের জন্য একটি REST এপিআই তৈরি করার চেষ্টা করছি যা ওয়ার্ডপ্রেস জব ম্যানেজার প্লাগইন ব্যবহার করে সুবিধার তালিকার জন্য ব্যবহৃত হয়।

আমি আমার কাস্টম পোস্ট, ট্যাক্সনোমিকে \ প্লাগইনস \ রেস্ট-এপি i প্লাগইন.পিপিতে নিবন্ধভুক্ত করেছি।

নীচে API আমাকে ডিফল্ট প্রতিক্রিয়া সহ সমস্ত তালিকা দেয় gives

HTTP: // স্থানীয় হোস্ট / খেলাধুলা / 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' );
    }
}

উপরের কোডটি ব্যবহার করে আমি একটি "টিআরএস" প্রতিক্রিয়া হিসাবে "ফোন" যুক্ত করতে সক্ষম তবে আমি সর্বদা ফোন = মিথ্যা সাড়া পেয়ে যাচ্ছি। এটি ডাব্লুপি_পোস্টমেটা টেবিল থেকে সঠিক ডেটা দেখাচ্ছে না।

রেফারেন্সের জন্য আমি নীচে উল্লিখিত লিঙ্কগুলি অনুসরণ করেছি।

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

বিস্তারিত প্লাগ করুন। 1. ডাব্লুপি জব ম্যানেজার 2. রেস্ট-এপিআই

যে কোনও সহায়তা সত্যই সহায়ক হবে।


"মিথ্যা" আপনি কোথায় দেখতে পাচ্ছেন? আপনি কি ব্রাউজারের নেটওয়ার্ক সরঞ্জামগুলির সাথে "তারে" আসলে চলছে তা পরীক্ষা করে দেখেছেন?
মার্ক কাপলুন

হাই আমি প্রতিক্রিয়া হিসাবে JSON এ পাচ্ছি।
হরি সনি

আমি পরিষেবাটি হিট করতে ক্রোম প্লাগইন পোস্টম্যান ব্যবহার করছি। আমি কোনও ধরণের প্রমাণীকরণ ব্যবহার করছি না। অনুরোধের বডিটিতে কোনও ডেটা ছাড়াই এটি একটি সাধারণ এপিআই অনুরোধ।
হরি সোনি

তাহলে আপনি কীভাবে জানবেন যে আপনি আসলে সঠিক পোস্টটি ট্রিগার করেছেন? আপনি কি সেই কলব্যাকটি পেতে পারেন?
মার্ক কাপলুন

আমি পিএইচপি এবং ওয়ার্ডপ্রেসে নতুন। আমি জাভার সাথে দীর্ঘদিন ধরে কাজ করছি। আপনি কি দয়া করে আমাকে জানাতে পারেন যে আমি আমার ফাংশনটি বলা হয় কিনা তা পরীক্ষা করে দেখতে পারি? আমি পোস্ট অবজেক্টটি প্রিন্ট করার চেষ্টা করেছি তবে মানটি দেখতে পেলাম না
হরি সনি 23'16

উত্তর:


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

ডব্লিউপি এপিআইয়ের একটি 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 );

একই ফিল্টারটি ব্যবহার করে আপনি প্রতিক্রিয়া থেকে ক্ষেত্র / ডেটাও সরিয়ে ফেলতে পারেন এবং ডেটা কোনও হেরফের করতে পারেন।


ওপিকে যেমনটি মনে হচ্ছে তেমনি বিভিন্ন অনুরোধে প্রতিটি তথ্য পাওয়ার চেষ্টা করার চেয়ে এটি সম্ভবত আরও ভাল উপায়।
মার্ক কাপলুন

এই সমাধানটি আমার পক্ষে নিখুঁতভাবে কাজ করেছে
আসিফ

2

এই ফাংশনটি কেবল ফাংশন.এফপিতে যুক্ত করুন

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

এখানে একটি ওওপি উদাহরণ রয়েছে:

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();
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.