मुझे नहीं लगता कि इस तरह के कार्यों के लिए एक प्लगइन का उपयोग किया जाना चाहिए। इसके अलावा एचसीसी का जवाब वास्तव में उतना बुरा नहीं है, इसे केवल nav_menu_item
पोस्ट प्रकार (wp नेविगेशन मेनू के लिए उपयोग किया जाने वाला) के साथ इस काम को करने के लिए कुछ और स्पष्टीकरण की आवश्यकता है ।
यह पोस्ट प्रकार पहले से पंजीकृत है और इस प्रकार हमें इसे बदलने की आवश्यकता है, यह आसानी से register_post_type_args
फ़िल्टर में हुक करके किया जाता है । यह फ़िल्टर हमें विशिष्ट पोस्ट प्रकार के लिए तर्कों को बदलने की अनुमति देता है। नीचे दिए गए कोड से पता चलता है कि nav_menu_item
पोस्ट प्रकार के लिए।
add_filter('register_post_type_args', function ($args, $post_type) {
if ($post_type == 'nav_menu_item' &&
class_exists('WP_REST_Posts_Controller') &&
!class_exists('WP_REST_NavMenuItem_Controller')) {
class WP_REST_NavMenuItem_Controller extends WP_REST_Posts_Controller {
public function get_items( $request ) {
$args = wp_parse_args($request, [
'order' => 'ASC',
'orderby' => 'menu_order',
]);
$output = [];
if (empty($request['menu'])) {
$menus = get_registered_nav_menus();
foreach ( $menus as $location => $description ) {
$items = wp_get_nav_menu_items($location, $args);
$output = array_merge($output, is_array($items) ? $items : []);
}
} else {
$items = wp_get_nav_menu_items($request['menu'], $args);
$output = array_merge($output, is_array($items) ? $items : []);
}
return rest_ensure_response($output);
}
public function get_collection_params() {
$query_params = parent::get_collection_params();
$query_params['menu'] = [
'description' => __( 'The name or also known as theme_location of the menu' ),
'type' => 'string',
];
return $query_params;
}
}
// Alter the post type arguments
$args['show_in_rest'] = true;
$args['rest_controller_class'] = 'WP_REST_NavMenuItem_Controller';
}
return $args;
}, 10, 2);
जैसा कि आपने ऊपर दिए गए कोड से देखा होगा, कोड REST में पोस्ट प्रकार दिखाने की तुलना में थोड़ा अधिक है। यह डिफ़ॉल्ट पोस्ट REST कंट्रोलर को भी बदल देता है REST में कुछ इसी तरह का आउटपुट दिखाने के लिए जैसा कि लिरन के उत्तर में वर्णित है । यद्यपि इसके बगल में यह भी होता है कि REST कंट्रोलर सभी प्रकार के पोस्ट क्या करते हैं और इस प्रकार आपको अधिक नियंत्रण और कार्यक्षमता प्रदान करते हैं। इसे और अधिक स्थिर विकल्पों के रूप में भी समझें क्योंकि यह अन्य REST मार्गों के साथ संघर्ष नहीं करेगा और अंतिम लेकिन कम से कम, इसके साथ काम करने के लिए अधिक सुविधाजनक भी है।