通过外部应用程序从wordpress读取数据

时间:2014-05-22 14:29:12

标签: php json wordpress

我是wordpress的新手,我正在创建我的第一个插件。我想在我的插件中添加一个功能,我可以从wordpress db中读取查询数据。我已经编写了一个函数来处理来自wordpress的用户数据,并将它们作为json回显。

function process_data($type, $sdate, $edate)
{
    $data = array();

    global $wpdb;

    if($type == 'overview' || $type == 'users')
    {
        $data[date('Y-m-d', strtotime($sdate))]['users'] = 0;

        $daily_users = $wpdb->get_results("SELECT COUNT(*) as cnt, DATE(user_registered) dte FROM $wpdb->users WHERE user_registered>='".date('Y-m-d', strtotime($sdate))."' AND user_registered<='".date('Y-m-d', strtotime($edate))."' GROUP BY dte");

        foreach($daily_users as $value)
        {
            $date = str_replace('-', '', $value->dte);
            $data[$date]['users'] = $value->cnt;
        }
    }

    echo json_encode($data);
}

但是,如何使用外部应用程序读取它们。有什么想法如何调用这个函数?

我很感激你的回答!

1 个答案:

答案 0 :(得分:1)

理想情况下,如果您想从外部应用程序访问此数据,则需要创建custom WordPress API endpoint

示例:

add_action('rest_api_init', 'my_rest_routes_init_7464');

function my_rest_routes_init_7464() {
    register_rest_route('my-custom-endpoint/v1','/get-db-data', array(
                        'methods' => 'GET, POST',
                        'callback' => 'process_data'
    ));
}

然后你需要将你的功能改为:

function process_data(WP_REST_Request $request)
{
    if(isset($request))
    {
        if(isset($request['type']) && isset($request['sdate']) && isset($request['edate']))
        {
            $type = sanitize_text_field($request['type']);
            $sdate = sanitize_text_field($request['sdate']);
            $edate = sanitize_text_field($request['edate']);
            $data = array();

            global $wpdb;

            if($type == 'overview' || $type == 'users')
            {
                $data[date('Y-m-d', strtotime($sdate))]['users'] = 0;

                $daily_users = $wpdb->get_results("SELECT COUNT(*) as cnt, DATE(user_registered) dte FROM $wpdb->users WHERE user_registered>='".date('Y-m-d', strtotime($sdate))."' AND user_registered<='".date('Y-m-d', strtotime($edate))."' GROUP BY dte");

                foreach($daily_users as $value)
                {
                    $date = str_replace('-', '', $value->dte);
                    $data[$date]['users'] = $value->cnt;
                }
            }

            echo json_encode($data);
            die();
        }
    } else {
        echo json_encode(array("error"=>"no request data"));
    }
}

只需使用http://yourdomain.com/my-custom-endpoint/v1/get-db-data/typesdate的GET或POST数据,即可从外部函数调用自定义结束点edate

警告:您应该考虑创建一个“秘密令牌”,您可以使用它来检查请求并阻止不包含秘密令牌的请求。