আমি মনে করি না এই ধরণের কাজের জন্য একটি প্লাগইন ব্যবহার করা উচিত। এছাড়াও এইচ সি সি এর উত্তর আসলে তেমন খারাপ নয়, nav_menu_item
পোস্ট টাইপ (ডাব্লুপি নেভিগেশন মেনুগুলির জন্য ব্যবহৃত একটি) দিয়ে এই কাজটি করার জন্য কেবল আরও কিছু ব্যাখ্যা প্রয়োজন ।
এই পোস্টের ধরণটি ইতিমধ্যে নিবন্ধীকৃত রয়েছে এবং সুতরাং আমাদের এটির পরিবর্তন করতে হবে, এটি সহজেই 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 তে কিছুটা অনুরূপ আউটপুট দেখানোর জন্য এটি ডিফল্ট পোস্ট আরএসটি নিয়ন্ত্রণকারীকেও পরিবর্তন করে । যদিও এর পরে এটি সমস্ত পোস্ট টাইপ আরইএসটি নিয়ন্ত্রণকারীরা যা করে তা করে এবং এটি আপনাকে আরও নিয়ন্ত্রণ এবং কার্যকারিতা দেয়। এটিকে আরও স্থিতিশীল বিকল্প হিসাবে বিবেচনা করুন কারণ এটি অন্যান্য আরএসটি রুটের সাথে বিরোধ না করে এবং শেষের দিকে নয় তবে এটি কাজ করার পক্ষে আরও সুবিধাজনক।