不确定是否有better 使用默认设置端点时的方式,但这对我适用
您可以使用rest_pre_get_setting
hook 要将数据转换为JSON编码的字符串,请执行以下操作:
add_filter( \'rest_pre_get_setting\', function ( $value, $name ) {
if ( \'default_sidebars\' === $name ) {
$value = json_encode( get_option( $name ) );
}
return $value;
}, 10, 2 );
然后,例如在JavaScript中,可以使用
JSON.parse()
:
// Note: I intentionally omitted the authentication/nonce part.
fetch( \'https://example.com/wp-json/wp/v2/settings\' )
.then( res => res.json() )
.then( settings => console.log( JSON.parse( settings.default_sidebars ) ) );
或者在PHP中(例如,您使用PHP从另一个站点发出API请求),您可以执行以下操作:
$settings = json_decode( $data ); // assume data is the REST API response body
$default_sidebars = json_decode( $settings->default_sidebars );
附加注释null
价值是因为get_option()
将数据取消序列化为数组,设置端点的REST API控制器正在使用rest_validate_value_from_schema()
验证选项值(即在取消序列化后),当它不是当前支持的类型(字符串、布尔值、整数和数字)时—看见register_setting()
, 然后,函数返回一个错误,设置端点/控制器返回一个null
对于该特定选项。
备选解决方案create a custom REST API endpoint 在下面的示例中,您可以请求/wp-json/myplugin/v1/setting/<option name>
哪里<option name>
可能是default_sidebars
在您的情况下:
add_action( \'rest_api_init\', function () {
register_rest_route( \'myplugin/v1\', \'/setting/(?P<name>[a-zA-Z0-9\\-_]+)\', [
\'methods\' => \'GET\',
\'callback\' => function ( $request ) {
return get_option( $request->get_param( \'name\' ) );
},
\'permission_callback\' => function () {
return current_user_can( \'manage_options\' ); // you should keep this
},
] );
} );