Bir eklentinin bu tür görevler için kullanılması gerektiğini düşünmüyorum. Ayrıca hkc'nin cevabı aslında o kadar da kötü değil, sadece nav_menu_item
yazı tipi (wp navigasyon menüleri için kullanılan) ile bu işi yapmak için biraz daha açıklamaya ihtiyaç var .
Bu yazı tipi zaten kayıtlı ve bu nedenle değiştirmemiz gerekiyor, bu kolayca register_post_type_args
filtreye takılarak yapılır . Bu filtre, belirli bir gönderi türü için bağımsız değişkenleri değiştirmemize olanak tanır. Aşağıdaki kod, nav_menu_item
gönderi türü için olanı gösterir .
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);
Yukarıdaki koddan fark etmiş olabileceğiniz gibi, kod sadece REST'teki yazı türünü göstermekten biraz daha fazlasını yapar. Ayrıca, Liren'in cevabında açıklandığı gibi REST'te benzer bir çıktı göstermek için varsayılan Mesajlar REST denetleyicisini değiştirir . Her ne kadar yanında tüm post tipi REST denetleyicilerinin yaptığını yapar ve böylece size daha fazla kontrol ve işlevsellik kazandırır. Ayrıca, diğer REST rotalarıyla çakışmayacağı ve son olarak, aynı zamanda çalışmak için daha uygun olduğu için bunu daha istikrarlı bir seçenek olarak düşünün.