2014-05-22 1 views
0

나는 아주 wordpress에 새롭다. 그리고 나는 나의 첫 번째 plugin을 만드는 길에있다. 내 플러그인에 기능을 추가하고 싶습니다. Wordpress db에서 쿼리 된 데이터를 읽을 수 있습니다. 나는 이미 wordpress에서 사용자 데이터를 처리하는 함수를 작성하여 json으로 표시합니다.외부 신청에 의하여 wordpress에서 자료를 읽으십시오

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

** 모든 응용 프로그램 **에서 공개 액세스를 사용하려면 [Custom Feeds] (http://codex.wordpress.org/Customizing_Feeds)를 대신 사용하는 것이 좋습니다. 그러나 어떤 종류의 데이터를 제공하고 있는지 알고 있어야합니다. 이는 엄청난 보안 결함으로 이어질 수 있습니다. – mathielo

+0

@mathielo Thx 님의 답변입니다! 또한 응용 프로그램에서 식별 할 수있는 키를 추가 할 것입니다. 그러나,이 함수를 호출하고 브라우저에 데이터를 표시하는 방법을 궁금해? json 객체를 보는 법? – mrquad

답변

1

외부 응용 프로그램에서이 데이터에 액세스하려면 custom WordPress API endpoint을 작성하는 것이 가장 좋습니다.

예 : 간단하게 사용하여 외부 함수에서 사용자 정의 엔드 포인트 http://yourdomain.com/my-custom-endpoint/v1/get-db-data/를 호출하거나 type에 대한 데이터를 GET 또는 POST

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")); 
    } 
} 

:

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' 
    )); 
} 

그런 다음 당신이 당신의 기능을 변경해야합니다 , sdateedate.

경고 : 요청을 확인하고 비밀 토큰이없는 요청을 차단하는 데 사용할 수있는 "비밀 토큰"을 만들어야합니다.

관련 문제