質問: 取得する wp からのナビゲーションメニュー rest api v2 wp rest api v2 pluginを使用してjsonレスポンスからナビゲーションメニューを取得しようとしています。[rest api v2 用のナビゲーションメニュープラグイン拡張機能はありませんが、v1のみです。コーデックス wordpress投稿タイプ から、ナビゲーションメニューが投稿タイプとして扱われることを学びました。from rest api doc から、これはどのようにしてタイプの投稿を取得するかです。get http://demo.wp-api.org/wp-json/wp/v2/types/<type>私はそうしようとしました:url : http://localhost/wptest/wp-json/wp/v2/types/nav_menu_item403エラーを受け取りました。{"code":"rest_cannot_read_type","message":"cannot view type.","data":{"status":403}}サーバーは私の要求を理解しましたが、データの提供を拒否しました。 q:どうすれば解決できますか?
回答: この種の作業にはプラグインを使用するべきではないと思います。また、 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で投稿タイプを表示するだけではありません。また、 lirenの答え で説明されているように、デフォルトのposts restコントローラを変更して、restにも似たような出力を表示します。それの隣にそれはまたすべてのポストタイプrestコントローラーがすることをし、そしてそれ故にあなたにより多くのコントロールと機能性を与えます。また、これは他のrestルートと競合しないことから、より安定したオプションであると考えてください。