कई मेटा कुंजी द्वारा क्वेरी WP REST API v2


9

REST API के v2 का उपयोग करते हुए, मैं कुछ पोस्ट को कई मेटा कुंजियों द्वारा क्वेरी करना चाहता हूं । V1 के साथ मैं यूआरएल को प्रारूपित करने में सक्षम था &filter[meta_value][month]=12&[meta_value][year]=2015और यह काम किया (एपीआई के लिए मेटा मानों को उजागर करने के बाद)।

अब v2 के साथ, मैं केवल इस GitHub थ्रेड पर सूचीबद्ध विधियों का उपयोग करके काम करने के लिए प्राप्त कर सकता हूं: https://github.com/WP-API/WP-API/issues/1599#issuecomment-1611666655

मूल रूप से, rest_query_varsजैसे फ़िल्टर का उपयोग करके मेटा फ़ील्ड जोड़ा गया :

add_filter( 'rest_query_vars', 'flux_allow_meta_query' ); function flux_allow_meta_query( $valid_vars ) { $valid_vars = array_merge( $valid_vars, array( 'meta_key', 'meta_value', 'meta_compare' ) ); return $valid_vars; }

इसके साथ, मैं एक url जैसे का उपयोग करके एक मेटा कुंजी द्वारा फ़िल्टर कर सकता हूं wp-json/wp/v2/posts?filter[meta_key]=test&filter[meta_value]=on

हालाँकि, यह कई मेटा कुंजियों पर फ़िल्टर करने का एकमात्र तरीका लगता है, जो कस्टम फ़िल्टर लिखना है। क्या कोई मुझे ऐसा करने की सही दिशा में इशारा कर सकता है?

जवाबों:


4

एक कस्टम समापन बिंदु जोड़ना बहुत सीधा है।

मैंने अधिक देखने के लिए url को भी संशोधित किया

http://example.com/wp-json/namespace/v2/posts?filter[meta_value][month]=12&filter[meta_value][year]=2015

function wp_json_namespace_v2__init()
{

    // create json-api endpoint

    add_action('rest_api_init', function () {

        // http://example.com/wp-json/namespace/v2/posts?filter[meta_value][month]=12&filter[meta_value][year]=2015

        register_rest_route('namespace/v2', '/posts', array (
            'methods'             => 'GET',
            'callback'            => 'wp_json_namespace_v2__posts',
            'permission_callback' => function (WP_REST_Request $request) {
                return true;
            }
        ));
    });

    // handle the request

    function wp_json_namespace_v2__posts($request)
    {
        // json-api params

        $parameters = $request->get_query_params();

        // default search args

        $args = array(
            'post_type'      => 'post',
            'post_status'    => 'publish',
            'numberposts'    => -1,
            // limit to only ids
            // 'fields'      => 'ids', 
        );

        // check the query and add valid items

        if (isset($parameters['filter']['meta_value'])) {
            foreach ($parameters['filter']['meta_value'] as $key => $value) {
                switch ($key) {

                    case 'month':
                        if (is_numeric($value))
                            $args['monthnum'] = $value;
                        break;

                    case 'year':
                        if (is_numeric($value))
                            $args['year'] = $value;
                        break;
                }
            }
        }

        // run query

        $posts = get_posts($args);

        // return results

        $data = array(
            'success' => true,
            'request' => $parameters,
            'count' => count($posts),
            'posts' => $posts,
        );

        return new WP_REST_Response($data, 200);
    }

    flush_rewrite_rules(true); // FIXME: <------- DONT LEAVE ME HERE
}

add_action('init', 'wp_json_namespace_v2__init');

मैं इस प्रतिक्रिया पर चित्रित छवि कैसे संलग्न कर सकता हूं?
शिन्या कोइज़ुमी


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