[WP] restapi 에 사용자정의필드 추가하고 가져오기 > IT 기술백서

IT 기술백서

직접 알아내거나 검색하기 귀찮아서 모아 둔 것

php | [WP] restapi 에 사용자정의필드 추가하고 가져오기

본문

워드프레스 restapi v2에서 기본 필드 외 사용자정의 필드를 추가하고 가져오는 방법이다.

 

현재 사용중인 테마 디렉터리안에 functions.php 를 열고 코드를 추가하자.

 

[code]

// 포스팅할때 postmeta 를 추가한다.

add_action("rest_insert_post", function ($post, $request, $creating) {

    $metas = $request->get_param("meta");

    if (is_array($metas)) {

        foreach ($metas as $name => $value) {

            update_post_meta($post->ID, $name, $value);

        }

    }

}, 10, 3);


// 포스팅 조회할때 postmeta 를 추가하여 돌려준다.  여기서는 임의의 메타 'foo' 를 추가한다.

add_action("rest_prepare_post", function ($data, $post, $context) {

    $meta = get_post_meta( $post->ID, 'foo', true);

    $data->data['meta'] = $meta;

    return $data;

}, 10, 3);

 

// 메타로 검색하기 지원

// 호출방법: http://{사이트주소}/wp-json/wp/v2/posts/?meta_key={메타키}&meta_value={메타값}&status= // status 상관없이 하려면 변수명은 꼭 줘야 한다.

// meta_query 는 sql 조건식을 array형태로 지원하는 것인데 자세한 것은 더 알아봐야 한다.

add_filter ("rest_post_query" , function ( $args, $request ) {

    $args += array(

        'meta_key'   => $request['meta_key'],

        'meta_value' => $request['meta_value'],

        'meta_query' => $request['meta_query'],

    );

    

    return $args;

}, 99, 2);

[/code]

 

포스팅할때 데이터

[code]

{

    "title": "사용자필드추가포스팅",

    "content": "사용자 필드를 추가하여 포스팅합니다.",

    "meta": {

        "foo": "foo라는 변수에 값"

    }

}

[/code]

 

임의의 변수 foo 에 값을 추가하고 조회할때 기본데이터와 함께 출력해준다.

- 출력결과 -

[code]

...

"title": {

    "raw": "사용자필드추가포스팅",

    "rendered": "사용자필드추가포스팅"

},

"content": {

    "raw": "사용자 필드를 추가하여 포스팅합니다.",

    "rendered": "<p>사용자 필드를 추가하여 포스팅합니다.</p>\n",

    "protected": false,

    "block_version": 0

},

"excerpt": {

    "raw": "",

    "rendered": "<p>사용자 필드를 추가하여 포스팅합니다.</p>\n",

    "protected": false

},

"author": 1,

"featured_media": 0,

"comment_status": "open",

"ping_status": "open",

"sticky": false,

"template": "",

"format": "standard",

"meta": "foo라는 변수에 값",

"categories": [

    1

],

"tags": [],

...

[/code]

 

댓글 0개

등록된 댓글이 없습니다.

Menu