如何解决无头的WordPress,是否有一种方法可以将wp_options表中的数据作为REST端点进行访问?
wordpress具有出色的REST API界面。 https://developer.wordpress.org/rest-api/reference/
但是wp_options表中的内容似乎缺少REST支持。有没有办法通过插件访问wp_otions表中的内容作为REST端点?谢谢。
解决方法
有一个settings
端点,但似乎只包含数量有限的端点。
这是您可以很轻松地自己做的事情。我不确定是否有插件可以这样做,但是我也不建议使用少于20行代码即可完成的事情。
您只需要在register_rest_route()
钩子上使用rest_api_init
注册路由,然后将其传递给回调函数即可。您可以将这样的代码放入functions.php
文件中,也可以创建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
但是,这可能会暴露选项表中的任何内容。我继续并注释了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
表的安全隐患,并采取某种预防措施!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。