1

Wordpress 有一个很棒的 REST API 接口。 https://developer.wordpress.org/rest-api/reference/

但是 wp_options 表中的内容似乎缺少 REST 支持。有没有办法通过插件访问 wp_otions 表中的内容作为 REST 端点?谢谢。

4

1 回答 1

1

settings端点,但它似乎只包含数量有限的端点。

这是你可以很容易地自己做的事情。我不确定是否有任何插件可以做到这一点,但我也不推荐使用少于 20 行代码即可完成的插件。

你只需要register_rest_route()rest_api_init钩子上注册一个路由,并传递一个回调函数。您可以将这样的代码放入您的functions.php文件中,或者创建一个必须使用的插件并将代码放入其中,无论哪种方式。

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-路由/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表的安全隐患,并采取某种预防措施!

于 2020-10-13T04:16:59.490 回答