
This plugin adds new endpoints for WordPress registered menus.
Usefull when building SPAs with Vuejs, React or any front-end framework.
Works with Advacned Custom Fields, WPML, Polylang
The new endpoints available:
Get all menus
GET /menus/v1/menus // Response sample { term_id: 2, name: "Main Menu", slug: "main-menu", term_group: 0, term_taxonomy_id: 2, taxonomy: "nav_menu", description: "", parent: 0, count: 8, filter: "raw" }, ... Get a menus items by id (term_id)
GET /menus/v1/menus/<id> // Response sample { ID: 5, post_author: "1", post_date: "2018-07-03 06:42:18", post_date_gmt: "2018-07-03 06:42:18", filter: "raw", db_id:5, menu_item_parent: "0", object_id: "5", object: "custom", type: "custom", type_label: "Custom Link", title: "Home", url: "https:\/\/wp-rest-menu.local\/", target: "", attr_title: "", description: "", classes: [ "" ], xfn: "", meta: null }, ... Get all menu locations
All menu locations assigned in /wp-admin/nav-menus.php?action=locations
GET /menus/v1/menus/locations is deprecated and will be removed in newer versions use: GET /menus/v1/locations // Response example { slug: "top", description: "Top Menu" }, { slug: "social", description: "Social Links Menu" } ... Get all menu location items
All menu locations assigned in /wp-admin/nav-menus.php?action=locations
GET /menus/v1/menus/locations/<slug> is deprecated and will be removed in newer versions use: GET /menus/v1/locations/<slug> // Response samexampleple { ID: 5, post_author: "1", post_date: "2018-07-03 06:42:18", post_date_gmt: "2018-07-03 06:42:18", filter: "raw", db_id:5, menu_item_parent: "0", object_id: "5", object: "custom", type: "custom", type_label: "Custom Link", title: "Home", url: "https:\/\/wp-rest-menu.local\/", target: "", attr_title: "", description: "", classes: [ "" ], xfn: "", meta: null }, ... There are two filters availiable:
Fields Filter
// it will return only the fields specified GET /menus/v1/menus/<id>/?fields=ID,title,meta // Response sample // Response sample { ID: 5, title: "Home", meta: null }, ... Nested Items Filter
// it will return menu items parents and nested children in a 'children' field // Currently only one level deep is supported GET /menus/v1/menus/<id>/?nested=1 // Response sample { ID: 1716, menu_item_parent: "0", object_id: "174", object: "page", title: "Level 1", meta: { vue_component: "LevelComponent", menu-item-field-01: "Field 1 value", menu-item-field-02: "Field 2 value" }, children:[ { ID: 1717, menu_item_parent: "1716", object_id: "744", object: "page", title: "Level 2b", meta : { vue_component: null } }, ... ] }, ... WP filter hooks
This plugin is quite configurable and provides lots of wp filter hooks from returned data in responses for each endpoint to params validation and endpoint permissions.
add_filter( 'wprm/get_menus/wp_get_nav_menus/args', 'my_wp_get_nav_menus', 10, 1 ); (used in GET /menus/v1/menus) function my_wp_get_nav_menus( $args ) { // do something with wp_get_nav_menus $args array return $args; } add_filter( 'wprm/get_menus', 'my_get_menus', 10, 1 ); (used in GET /menus/v1/menus) function my_get_menus( $menus ) { // do something with $menus array return $menus; // WP_Error|WP_HTTP_Response|WP_REST_Response|mixed } add_filter( 'wprm/get_menu_locations', 'my_get_menu_locations', 10, 1 ); (used in GET /menus/v1/locations) function my_get_menu_locations( $locations ) { // You can modify the $locations array response (get_registered_nav_menus()) return $locations; // WP_Error|WP_HTTP_Response|WP_REST_Response|mixed } add_filter( 'wprm/get_menu_items', 'my_get_menu_items', 10, 1 ); (used in GET /menus/v1/menus/<id>) function my_rest_menu_item_fields( $menu ) { // You can modify the $menu items return $menu; } add_filter( 'wprm/get_location_menu_items', 'my_get_location_menu_items', 10, 1 ); (used in GET /menus/v1/menus/<id>) function my_get_location_menu_items( $menu ) { // You can modify the locations $menu items return $menu; } add_filter( 'wprm/get_item_fields/filter_fields', 'my_filter_fields', 10, 1 ); (used to filter return field -node edges-) function my_filter_fields( $fields ) { // You can modify the $fields array so // you can filter the return fields for all endpoints // without using the url param ?fields $fields = array( 'ID', 'title' ); return $fields; } More filters
apply_filters('wprm/get_menus/permissions', '__return_true', $request ); apply_filters('wprm/get_menu_locations/permissions', '__return_true', $request ); apply_filters('wprm/get_menu_items/permissions', '__return_true', $request ); apply_filters('wprm/get_menu_items/validate/args/id', is_numeric( $param ), $param, $request, $key ); apply_filters('wprm/get_menu_items/validate/args/fields', is_string( $param ), $param, $request, $key ); apply_filters('wprm/get_menu_items/validate/args/nested', absint( $param ), $param, $request, $key ); apply_filters('wprm/get_location_menu_items/permissions', '__return_true', $request ); apply_filters('wprm/get_location_menu_items/validate/args/slug', is_string( $param ), $param, $request, $key ); apply_filters('wprm/get_location_menu_items/validate/args/fields', is_string( $param ), $param, $request, $key ); apply_filters('wprm/get_location_menu_items/validate/args/nested', absint( $param ), $param, $request, $key ); apply_filters('wprm/get_location_menu_items/permissions', '__return_true', $request ); apply_filters('wprm/get_location_menu_items/validate/args/slug', is_string( $param ), $param, $request, $key ); apply_filters('wprm/get_location_menu_items/validate/args/fields', is_string( $param ), $param, $request, $key ); apply_filters('wprm/get_location_menu_items/validate/args/nested', absint( $param ), $param, $request, $key ); Supports custom fields and Advanced Custom Fields
If ACF is installed the response node edge is acf else meta
In newer version these two edges will co exist and the plugin will separate natively registered custom fields ad acf registered ones.
Starting from $0 per month.
Rating
Reviewers
4 reviews
Tags
Developed By
skapator
Quick & Easy
Common Ninja has a large selection of powerful Wordpress plugins that are easy to use, fully customizable, mobile-friendly and rich with features — so be sure to check them out!
Testimonial plugins for Wordpress
Galleries plugins for Wordpress
SEO plugins for Wordpress
Contact Form plugins for Wordpress
Forms plugins for Wordpress
Social Feeds plugins for Wordpress
Social Sharing plugins for Wordpress
Events Calendar plugins for Wordpress
Sliders plugins for Wordpress
Analytics plugins for Wordpress
Reviews plugins for Wordpress
Comments plugins for Wordpress
Portfolio plugins for Wordpress
Maps plugins for Wordpress
Security plugins for Wordpress
Translation plugins for Wordpress
Ads plugins for Wordpress
Video Player plugins for Wordpress
Music Player plugins for Wordpress
Backup plugins for Wordpress
Privacy plugins for Wordpress
Optimize plugins for Wordpress
Chat plugins for Wordpress
Countdown plugins for Wordpress
Email Marketing plugins for Wordpress
Tabs plugins for Wordpress
Membership plugins for Wordpress
popup plugins for Wordpress
SiteMap plugins for Wordpress
Payment plugins for Wordpress
Coming Soon plugins for Wordpress
Ecommerce plugins for Wordpress
Customer Support plugins for Wordpress
Inventory plugins for Wordpress
Video Player plugins for Wordpress
Testimonials plugins for Wordpress
Tabs plugins for Wordpress
Social Sharing plugins for Wordpress
Social Feeds plugins for Wordpress
Slider plugins for Wordpress
Reviews plugins for Wordpress
Portfolio plugins for Wordpress
Membership plugins for Wordpress
Forms plugins for Wordpress
Events Calendar plugins for Wordpress
Contact plugins for Wordpress
Comments plugins for Wordpress
Analytics plugins for Wordpress
Common Ninja Apps
Browse our extensive collection of compatible plugins, and easily embed them on any website, blog, online store, e-commerce platform, or site builder.
Nudge button with a subtle shaking animation that draws attention to important calls to action, increases interaction, and helps boost conversions.
Show business locations clearly with a Google Maps widget that displays multiple points, detailed info, and customizable styles to help visitors find you easily.
Add a currency converter to your site so users can view equivalent values in their local currency for easier global access.
Use feature voting so users submit ideas, vote on requests, and help you prioritize product updates by real customer demand.
Show live streams and clips with a Twitch feed that keeps content fresh, boosts engagement, and helps visitors follow your channel more easily.
Show Instagram posts in a responsive carousel layout to enhance social proof and keep your site content visually fresh.
Show YouTube videos with a YouTube slider that displays clips in a smooth, customizable layout to boost engagement.

Show YouTube videos in a customizable YouTube feed that keeps content fresh, boosts watch time, and helps visitors explore more of your channel.
Create interactive infographics with a ratio widget that uses custom icons, dynamic tooltips, and clear visuals to help visitors understand data quickly.
Display Bluesky posts with a Bluesky feed carousel that auto updates, shows posts in a clear layout, and keeps visitors engaged.
Add an FAQ section to your site to answer common questions, reduce support requests, and give visitors a smoother and more confident user experience.
Create interactive image polls that use compelling visuals to boost engagement, gather feedback, and help visitors vote easily.
More plugins
The Common Ninja Search Engine platform helps website builders find the best site widgets, apps, plugins, tools, add-ons, and extensions! Compatible with all major website building platforms - big or small - and updated regularly, our Search Engine tool provides you with the business tools your site needs!
