我可以将init钩子用于API目的吗?

时间:2015-05-02 作者:rram

我的问题标题可能有点混乱。下面是一个场景,例如:我正在wordpress站点上提供一个API服务。

使用它,其他人几乎不知道什么信息。比如,如果他们在查询URL中发送用户ID,那么我会向他们发送用户电话号码。

例如:如果他们使用www.example.com/?cuid=23

现在开始init 钩子我去看看cuid 中存在$_GET 变量,如果它存在,那么我将获取电话号码并使用电话号码禁用该函数。自从init 钩子是我选择使用的最早的钩子。

function tell_phone_num(){
         if(isset($_GET[\'cuid\'])){
         //some one wants the service 
          //I\'ll get the phone number and show it -> $user_phone
         //setting response format, like json etc
          die($user_phone);
          }
}
add_action(\'init\',\'tell_phone_num\');
这很好用。使用访问站点时cuid 那么只有此功能才能工作。

这只是一个例子,但电话号码不是我真正的信息。我不需要身份验证,因为我提供的信息不敏感。

这是我的问题。这是正确的方法吗?或者我应该采用其他最佳实践方法吗。

2 个回复
SO网友:Milo

如果您想要一个更加用户友好的URL结构,您可以add a rewrite endpoint.

这将向添加和拦截请求的规则/my-api/:

function wpd_add_api_endpoint() {
    add_rewrite_endpoint( \'my-api\', EP_ROOT );
}
add_action( \'init\', \'wpd_add_api_endpoint\' );

function wpd_api_request( $request ){
    if( isset( $request->query_vars[\'my-api\'] ) ){

        // $request->query_vars[\'my-api\'] is a string containing everything after your url slug
        // convert it to array
        $parts = explode( \'/\', $request->query_vars[\'my-api\'] );

        echo \'<pre>\';
        print_r( $parts );
        echo \'</pre>\';

        die;
    }
}
add_action( \'parse_request\', \'wpd_api_request\' );
刷新规则后,请尝试以下请求:

http://example.com/my-api/something/else/123/4,5,6/&7

将输出:

Array
(
    [0] => something
    [1] => else
    [2] => 123
    [3] => 4,5,6
    [4] => &7
)

SO网友:Emetrop

init 对于这个目的来说是好的。在里面codex 是这样写的:

init对于拦截$\\u GET或$\\u POST触发器很有用。

结束

相关推荐

设置API回调函数不会显示吗?

大家好,我一直在使用设置API,我的代码不会运行。我有一个名为“kaipo”的选项页,其中的回调函数add\\u options\\u page函数将从kaipo\\u menu\\u回调函数输出“hii”。这是我的代码中唯一实际运行的部分。当我声明我的节时,应该输出“Helloooo”的函数不会打印,并且我的输入字段也不会显示。i、 e Kaipo\\u footer\\u message\\u display和Kaipo\\u message\\u display功能不打印任何内容。我有没有注册错误?