WP REST API 기본 경로 사용 안 함
디폴트 루트를 디세블로 할 필요가 있다WP REST API커스텀 루트를 추가합니다.
저는 이 질문을 발견했는데, 이 질문은 다음과 같은 답을 찾는 데 도움이 됩니다.
remove_action('rest_api_init', 'create_initial_rest_routes', 99);단, 커스텀콘텐츠 타입 루트도 삭제됩니다.대신 다음을 사용할 수 있습니다.
add_filter('rest_endpoints', function($endpoints) { if ( isset( $endpoints['/wp/v2/users'] ) ) { unset( $endpoints['/wp/v2/users'] ); } // etc });
그러나 이 방법에서는 모든 디폴트루트를 파악하고 하나씩 삭제해야 합니다.이것은 가장 깨끗한 방법이 아닙니다.
그것을 달성할 수 있는 더 깨끗한 방법이 있는지 알고 싶습니다.
업데이트 1:
Chris의 제안에 따라 질문할 내용을 추가하겠습니다.
현재 사용하고 있습니다.rest_api_init필터를 사용하여 커스텀루트를 추가합니다register_rest_route이 기사에서 찾은 아래 코드와 같은 방법을 사용합니다.
add_action( 'rest_api_init', function () {
register_rest_route( 'myplugin/v1', '/sample/', array(
'methods' => 'GET',
'callback' => 'my_awesome_func',
) );
} );
function my_awesome_func( $data ) {
return 'somthing';
}
커스텀 루트는 정상적으로 동작하지만 유감스럽게도 다음과 같은 디폴트루트를 디세블로 할 수 없습니다./wp/v2/posts.
질문입니다.
를 사용하는 동안 디폴트루트를 설정 또는 해제하는 방법rest_api_init필터를 사용하여 새 사용자 지정 경로를 등록하시겠습니까?
이 질문은 이미 답변을 받아들였습니다.하지만 이게 유용하다고 생각하는 사람이 있다면요.디폴트 루트를 쉽게 삭제할 수 있습니다.테마의 기능(자체 테마가 있는 경우)에 다음 코드를 추가합니다.php 또는 임의의 커스텀플러그인
add_filter('rest_endpoints', function( $endpoints ) {
foreach( $endpoints as $route => $endpoint ){
if( 0 === stripos( $route, '/wp/' ) ){
unset( $endpoints[ $route ] );
}
}
return $endpoints;
});
다른 질문에 따르면, 이것이 현재 그것을 할 수 있는 유일한 "깨끗한" 방법입니다.Wordpress에서 가장 깔끔하게 접근하는 방법은 필터 및/또는 동작을 사용하는 것입니다. 이를 통해 코어를 변경하지 않고도 코어와 상호 작용할 수 있습니다.
필터/액션을 누르면 후크 전후에 필터/액션 인수를 조작할 수 있는 기회도 다른 플러그인에 주어집니다.
보시면class-wp-rest-server.php휴식과 관련하여 사용 가능한 모든 필터와 동작을 쉽게 볼 수 있습니다.
특히, 다음의 점에 주목해 주세요.
/**
* Filters the array of available endpoints.
*
* @since 4.4.0
*
* @param array $endpoints The available endpoints. An array of matching regex patterns, each mapped
* to an array of callbacks for the endpoint. These take the format
* `'/path/regex' => array( $callback, $bitmask )` or
* `'/path/regex' => array( array( $callback, $bitmask ).
*/
$endpoints = apply_filters( 'rest_endpoints', $this->endpoints );
제가 조사한 바로는 엔드포인트를 수정(삭제, 변경 또는 추가)하는 마지막 지점이며 필터의 정확한 용도가 여기에 있습니다.
사이드노트로서 「하나씩」할 필요는 없습니다.그냥 하면 됩니다.$endpoints = []새로운 출발을 위해.
우리는 그 플러그인으로 많은 일을 처리할 수 있습니다.
최근 REST API에 회원 전용 콘텐츠가 표시되지 않도록 해야 했습니다.나머지 엔드포인트를 필터링하는 대신 투고 유형을 등록하는 데 사용되는 arg를 필터링했습니다.
function dbdb_unset_rest_routes( $args, $post_type ) {
$allowed_post_types = array( 'page', 'post', 'company', 'job' );
$allowed_post_types = apply_filters( 'dbdb_unset_rest_routes_types', $allowed_post_types );
if( in_array( $post_type, $allowed_post_types ) ){
return $args;
} else {
$args['show_in_rest'] = 0;
}
return $args;
}
add_filter( 'register_post_type_args', 'dbdb_unset_rest_routes', 20, 2 );
는 REST API를 합니다.get_post_types()create_initial_rest_routes() 글의 가 있다, 없다, 없다, 라고 하는 .show_in_rest로 true. . arg는 arg로 필터링합니다.register_post_type_argsregister_post_type()이러한 루트가 API에 표시되지 않도록 필터링할 수 있습니다.
언급URL : https://stackoverflow.com/questions/42757726/disable-default-routes-of-wp-rest-api
'source' 카테고리의 다른 글
| Angular JS: REST/CRUD 백엔드의 GET/POST/DELETE/PUT 클라이언트의 전체 예? (0) | 2023.03.29 |
|---|---|
| kotlin 데이터 클래스에 대한 Jackson@JsonProperty 주석 사용 (0) | 2023.03.29 |
| 구성 요소 상태의 어레이에서 요소를 제거하는 중 (0) | 2023.03.19 |
| react native에서 로컬 JSON 파일에서 데이터를 가져오려면 어떻게 해야 합니까? (0) | 2023.03.19 |
| Wordpress localhost ftp (0) | 2023.03.19 |
