Skip to content

Commit 189a40b

Browse files
committed
Merge branch 'feature/menu-endpoints'
2 parents 325db10 + 24ac229 commit 189a40b

File tree

4 files changed

+83
-3
lines changed

4 files changed

+83
-3
lines changed

README.md

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ Returns the following JSON response:
103103
- slug
104104
- title
105105
- date (ISO 8601)
106-
- post terms
106+
- post terms
107107
- excerpt
108108
- content
109109
- all possible thumbnail sizes & URLs
@@ -128,3 +128,16 @@ Returns the following JSON Response:
128128
- all possible thumbnail sizes & URLs
129129
- Author & Author ID
130130
- ACF Fields, if applicable
131+
132+
### Menus
133+
**`better-wp-endpoints/v1/menus/{menu-slug}`**
134+
Gets a WordPress Menu by slug. Accepts no parameters.
135+
136+
Returns the following JSON Response in each item object:
137+
138+
- menu_order
139+
- title
140+
- url
141+
- target
142+
- description
143+
- classes (array)

better-wp-endpoints.php

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
Plugin Name: Better WordPress Endpoints
44
Plugin URI: https://github.com/factor1/better-wp-endpoints/
55
Description: Serves up slimmer WordPress Rest API endpoints, with some great enhancements.
6-
Version: 0.1.0
6+
Version: 0.1.1
77
Author: Eric Stout, Factor1 Studios
88
Author URI: https://factor1studios.com/
99
License: GPL3
@@ -94,6 +94,9 @@ private function includes() {
9494

9595
// get custom post type by id
9696
include_once self::$plugin_dir . 'includes/get_cpt_by_id.php';
97+
98+
// get custom post type by id
99+
include_once self::$plugin_dir . 'includes/wp_nav_menus.php';
97100
}
98101

99102
}

includes/wp_nav_menus.php

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
<?php
2+
/**
3+
* Get WordPress Nav Menus
4+
*
5+
* @param N/A
6+
* @return object|null Return wp_nav_menu object,
 * or null if none.
7+
* @since 0.1.1
8+
*/
9+
10+
function bwe_get_menus() {
11+
12+
// get registered menus
13+
$menus = get_terms('nav_menu');
14+
15+
foreach ($menus as $key => $menu) {
16+
17+
/*
18+
*
19+
* Filter out unwanted responses
20+
*
21+
*/
22+
23+
$menu_items = wp_get_nav_menu_items($menu->slug);
24+
25+
$slim_menu_items = array();
26+
27+
foreach ($menu_items as $key => $menu_item) {
28+
// create a new object for a smaller response
29+
$items = new stdClass();
30+
31+
// get menu item data and add it to our new object
32+
$items->menu_order = $menu_item->menu_order;
33+
$items->title = $menu_item->title;
34+
$items->url = $menu_item->url;
35+
$items->target = $menu_item->target;
36+
$items->description = $menu_item->description;
37+
$items->classes = $menu_item->classes;
38+
39+
array_push($slim_menu_items, $items);
40+
}
41+
42+
/*
43+
*
44+
* Register Rest API Endpoint
45+
*
46+
*/
47+
48+
register_rest_route( 'better-wp-endpoints/v1', '/menus/'.$menu->slug.'/', array(
49+
'methods' => 'GET',
50+
'callback' => function ( WP_REST_Request $request ) use($slim_menu_items) {
51+
return $slim_menu_items;
52+
},
53+
));
54+
55+
}
56+
57+
}
58+
59+
/*
60+
*
61+
* Add action for cpt endpoint building
62+
*
63+
*/
64+
add_action( 'rest_api_init', 'bwe_get_menus' );

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "better-wp-endpoints",
3-
"version": "0.1.0",
3+
"version": "0.1.1",
44
"description": "Serves up slimmer WordPress Rest API endpoints.",
55
"main": "index.js",
66
"scripts": {

0 commit comments

Comments
 (0)