티스토리 뷰

etc

Wordpress 에 Custom endpoint 추가

keehyun2 2019. 2. 13. 11:01

Wordpress로 개발한 HTML 화면에서 비동기적으로 DB 서버와 통신하려면 restful api가 필요합니다. 이를 위해 저희가 필요로하는 데이터를 반환하는 endpoint를 php로 개발해야합니다.


워드프레스에서 php를 개발하는 여러가지 방법이 있습니다만 워드프레스에서는 플러그인이나 테마 파일을 직접 파일 수정하는 것을 권장하지 않습니다. 이유는 차후에 플러그인 업데이트를 대비와 잘못된 소스코드 수정을 막기 위해서 입니다.


functions.php 에 사용자 정의 함수를 추가하여 사용하는 것을 권장합니다. 여기서 restful endpoint를 추가할 수 있습니다. 한가지 단점은 wp_get_current_user() 을 사용하여 로그인한 사용자 정보를 가져오지 못합니다. 사용자 인증을 사용하려면 rest api handbook사용하여 개발할 수 있습니다. 저는 일단 인증없이 사용해보겠습니다.


제가 사용하는 테마는 hestia-child 로 wp-content\themes\hestia-child 이 경로에 functions.php 을 수정하여 endpoint 를 개발하였습니다. 다음은 endpoint 를 추가하는 code 입니다.

add_action( 'rest_api_init', function () {
    register_rest_route( 'khphub/v1', '/support/', array(
        'methods' => 'GET',
        'callback' => 'tickets'
    ));
    register_rest_route( 'khphub/v1', '/support/', array(
        'methods' => 'POST',
        'callback' => 'create_ticket'
    ));
    ... // 다른 라우터들
});

위에 add_action 이란 함수가 있습니다. 워드프레스의 Hook 기능을 활용하는 합수입니다. rest_api_init event에 다음 함수를 추가하라는 의미입니다. Hook 기능은 여러 프로그래밍에서 사용되어집니다. 예를 들어 Github repository 설정에 webhook 이라는 기능이 있는데, 이 것은 특정 이벤트(ex. push, etc)가 발생하였을때 지정한 url 로 post request 를 보내는 기능입니다.


register_rest_routeendpoint url, http method, callback function 을 정의합니다. 위와 같이 정의 하였을때는 localhost/wp-json/khphub/v1/support?id=1GET method request 를 하였을때 tickets 함수가 실행됩니다. 이 함수 안에서 db 를 조회하여 결과를 반환해야합니다.

function tickets($request_data) {
    global $wpdb;
    $parameters = $request_data->get_params();
    $sql = "select name from members where id = {$parameters[id]}";
    return $wpdb->get_results($sql);
}

참고 - adding-custom-endpoints

댓글
글 보관함
최근에 올라온 글
Total
Today
Yesterday
링크