我是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);
}
但是,如何使用外部应用程序读取它们。有什么想法如何调用这个函数?
我很感激你的回答!
答案 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/
,type
和sdate
的GET或POST数据,即可从外部函数调用自定义结束点edate
。
警告:您应该考虑创建一个“秘密令牌”,您可以使用它来检查请求并阻止不包含秘密令牌的请求。