Saya tidak berpikir plugin harus digunakan untuk tugas-tugas semacam ini. Juga jawaban hkc sebenarnya tidak terlalu buruk, hanya perlu penjelasan lebih lanjut untuk membuat ini bekerja dengan nav_menu_item
jenis posting (yang digunakan untuk menu navigasi wp).
Jenis posting ini sudah terdaftar dan dengan demikian kita perlu mengubahnya, ini mudah dilakukan dengan menghubungkan ke register_post_type_args
filter. Filter ini memungkinkan kita untuk mengubah argumen untuk jenis posting tertentu. Kode di bawah ini menunjukkan hal itu untuk nav_menu_item
jenis posting.
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);
Seperti yang mungkin Anda perhatikan dari kode di atas, kode tersebut sedikit lebih dari sekadar menampilkan jenis posting di REST. Ini juga mengubah controller Posting REST default untuk menampilkan output yang agak mirip di REST seperti yang dijelaskan dalam jawaban Liren . Meskipun di samping itu juga melakukan apa yang semua pengontrol REST jenis posting lakukan dan dengan demikian memberi Anda lebih banyak kontrol dan fungsionalitas. Juga pertimbangkan ini sebagai opsi yang lebih stabil karena tidak akan bertentangan dengan rute REST lainnya dan yang tak kalah pentingnya, ini juga jauh lebih nyaman untuk digunakan.