Headless Wordpress,有没有办法将 wp_options table 中的数据作为 REST 端点访问?
Headless Wordpress, Is there a way to access data in wp_options table as REST endpoint?
Wordpress 有一个很棒的 REST API 界面。
https://developer.wordpress.org/rest-api/reference/
但是 wp_options table 中的内容似乎缺少 REST 支持。有没有办法通过插件访问 wp_otions table 中的内容作为 REST 端点?。谢谢
有 settings
端点,但它似乎只包含非常有限的端点。
这是您自己可以轻松完成的事情。我不确定是否有任何插件可以做到这一点,但我也不推荐使用少于 20 行代码就可以完成的插件。
您只需使用 register_rest_route()
on the rest_api_init
hook, and pass it a callback function. You can drop code like this in your functions.php
file or create a Must Use Plugin 注册一条路线,然后将代码放入其中即可。
add_action( 'rest_api_init', function () {
register_rest_route( 'my-custom-route/v1', '/opt/', array(
'methods' => 'GET',
'callback' => 'get_rest_option',
//'permission_callback' => function () {
// return current_user_can( 'administrator' );
//}
) );
} );
function get_rest_option( $data ) {
return get_option( $data['option_name'] );
}
以上将让您通过访问访问任何您想要的选项:
/wp-json/my-custom-route/v1/opt/?option_name=siteurl
我继续在我的网站上放了一个例子:
https://xhynk.com/content-mask/wp-json/my-custom-route/v1/opt/?option_name=blogname
https://xhynk.com/content-mask/wp-json/my-custom-route/v1/opt/?option_name=siteurl
但是,这可能会在您的选项 table 中公开 任何内容。我继续并注释掉 permission_callback
以便任何人,无论是否登录,都可以访问它。但是,我还添加了这样的检查:
function get_rest_option( $data ) {
if( $data['option_name'] === 'siteurl' || $data['option_name'] === 'blogname' ){
return get_option( $data['option_name'] );
} else {
return 'Unauthorized. Use `siteurl` or `blogname`';
}
}
可以看到home
会失败:https://xhynk.com/content-mask/wp-json/my-custom-route/v1/opt/?option_name=home
我建议添加一个有效的选项数组,或者使用 permission_callback
来稍微锁定它。您甚至可以拥有一个访问密钥,并将该密钥保密。无论哪种方式,请注意暴露整个 wp_options
table 的安全隐患,并采取 一些 类预防措施!
Wordpress 有一个很棒的 REST API 界面。 https://developer.wordpress.org/rest-api/reference/
但是 wp_options table 中的内容似乎缺少 REST 支持。有没有办法通过插件访问 wp_otions table 中的内容作为 REST 端点?。谢谢
有 settings
端点,但它似乎只包含非常有限的端点。
这是您自己可以轻松完成的事情。我不确定是否有任何插件可以做到这一点,但我也不推荐使用少于 20 行代码就可以完成的插件。
您只需使用 register_rest_route()
on the rest_api_init
hook, and pass it a callback function. You can drop code like this in your functions.php
file or create a Must Use Plugin 注册一条路线,然后将代码放入其中即可。
add_action( 'rest_api_init', function () {
register_rest_route( 'my-custom-route/v1', '/opt/', array(
'methods' => 'GET',
'callback' => 'get_rest_option',
//'permission_callback' => function () {
// return current_user_can( 'administrator' );
//}
) );
} );
function get_rest_option( $data ) {
return get_option( $data['option_name'] );
}
以上将让您通过访问访问任何您想要的选项:
/wp-json/my-custom-route/v1/opt/?option_name=siteurl
我继续在我的网站上放了一个例子:
https://xhynk.com/content-mask/wp-json/my-custom-route/v1/opt/?option_name=blogname https://xhynk.com/content-mask/wp-json/my-custom-route/v1/opt/?option_name=siteurl
但是,这可能会在您的选项 table 中公开 任何内容。我继续并注释掉 permission_callback
以便任何人,无论是否登录,都可以访问它。但是,我还添加了这样的检查:
function get_rest_option( $data ) {
if( $data['option_name'] === 'siteurl' || $data['option_name'] === 'blogname' ){
return get_option( $data['option_name'] );
} else {
return 'Unauthorized. Use `siteurl` or `blogname`';
}
}
可以看到home
会失败:https://xhynk.com/content-mask/wp-json/my-custom-route/v1/opt/?option_name=home
我建议添加一个有效的选项数组,或者使用 permission_callback
来稍微锁定它。您甚至可以拥有一个访问密钥,并将该密钥保密。无论哪种方式,请注意暴露整个 wp_options
table 的安全隐患,并采取 一些 类预防措施!