이런 종류의 작업에는 플러그인을 사용해야한다고 생각하지 않습니다. 또한 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 경로와 충돌하지 않으며 적어도 작업하기가 더 편리하므로 더 안정적인 옵션으로 고려하십시오.