我使用以下插件从WordPress REST API获取JSON数据:
高级自定义字段PRO WP REST API ACF到REST API
我有一个名为"自定义导航"的自定义帖子类型。我有一个自定义字段组(通过ACF)称为"自定义导航项"仅在帖子类型为自定义导航时应用。该组中的字段称为"图像"和#34; Caption",我无法获得它的价值。
这里是我设置菜单并为ACF添加REST API插件的过滤器的地方。这些按预期工作。
function custom_setup() {
// This theme uses wp_nav_menu() in two locations.
register_nav_menus( array(
'topnav' => 'Top Menu',
'footer-left-nav' => 'Footer Top Menu 1',
'footer-center-left-nav' => 'Footer Top Menu 2',
'footer-center-right-nav' => 'Footer Top Menu 3',
'footer-right-nav' => 'Footer Top Menu 4',
'footer-bottom-left-nav' => 'Footer Bottom Menu 1',
'footer-bottom-right-nav' => 'Footer Bottom Menu 2',
) );
// Enable the option show in rest
add_filter( 'acf/rest_api/field_settings/show_in_rest', '__return_true' );
// Enable the option edit in rest
add_filter( 'acf/rest_api/field_settings/edit_in_rest', '__return_true' );
}
add_action( 'after_setup_theme', ‘custom_setup' );
此函数将我的自定义帖子类型菜单项设置为WP REST API。这样做就像预期的那样。但是,这些帖子类型菜单项的ACF字段不发送
function wp_api_v2_custom_get_menu_data ($data) {
if ( ( $locations = get_nav_menu_locations() ) && isset( $locations[ $data['id'] ] ) ) {
$menu = wp_get_nav_menu_object( $locations[$data['id']] );
$menuItems = wp_get_nav_menu_items($menu->term_id);
return $menuItems;
} else {
return array();
}
}
add_action( 'rest_api_init', function () {
register_rest_route( 'menus/v1', '/menus/(?P<id>[a-zA-Z(-]+)', array(
'methods' => 'GET',
'callback' => 'wp_api_v2_custom_get_menu_data',
) );
} );
这是我设置自定义帖子类型的功能
function custom_nav_post_type() {
register_post_type(‘custom_nav',
array (
'name' => ‘Custom Navigation',
'singular_name' => 'CustomNav',
'can_export' => TRUE,
'exclude_from_search' => FALSE,
'has_archive' => TRUE,
'hierarchical' => TRUE,
'label' => 'Custom Navigation',
'menu_position' => 5,
'public' => TRUE,
'publicly_queryable' => TRUE,
'query_var' => ‘customnav',
'rewrite' => array ( 'slug' => 'shop' ),
'show_ui' => TRUE,
'show_in_menu' => TRUE,
'show_in_nav_menus' => TRUE,
'show_in_rest' => TRUE,
'rest_base' => 'shop',
'rest_controller_class' => 'WP_REST_Posts_Controller',
'supports' => array ('title')
)
);
}
add_action( 'init', 'custom_nav_post_type' );
?>
这一切的输出
[
{
"id":184,
"acf":[
]
},
{
"id":183,
"acf":[
]
},
{
"id":182,
"acf":[
]
},
{
"id":181,
"acf":[
]
},
{
"id":180,
"acf":[
]
},
{
"id":176,
"acf":[
]
}
]
对于我出错的地方的任何建议都将不胜感激。
答案 0 :(得分:0)
以下是我如何解决它。我错过了自定义帖子类型的过滤器,我将其添加到“custom_setup”函数中。
add_filter('rest_prepare_custom_nav', function($response) {
$response->data['acf'] = get_fields($response->data['id']);
return $response;
});
所以过滤器是一个外卡过滤器,应用
apply_filter("rest_prepare_YOUR-CUSTOM-POST-TYPE-NAME-HERE", ...