この種のタスクにはプラグインを使用すべきではないと思います。また、hkcの答えは実際にはそれほど悪くはありません。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で投稿タイプを表示するだけではありません。また、デフォルトのPosts RESTコントローラーを変更して、Lirenの回答で説明されているRESTに多少似た出力を表示します。その次には、すべての投稿タイプのRESTコントローラーが行うことも行うため、より多くの制御と機能を提供します。また、これは他のRESTルートと競合しないため、より安定したオプションであると考えてください。