Ответ 1
REST API Toolbox выполнил эту работу для меня.
Мы можем обрабатывать многие вещи через этот плагин.
Мне нужно отключить маршруты по умолчанию 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:
В соответствии с предложением Криса я хотел бы добавить более подробную информацию к вопросу.
В настоящее время я использую фильтр 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
для регистрации новых настраиваемых маршрутов?
REST API Toolbox выполнил эту работу для меня.
Мы можем обрабатывать многие вещи через этот плагин.
В соответствии с другим вопросом, это единственный "чистый" способ сделать это в настоящее время. Самый чистый способ подойти к вещам в 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 = []
, чтобы начать новый.
Этот вопрос уже принял ответ. Но если кто-нибудь найдет это полезным. Мы можем легко удалить маршруты по умолчанию. Добавьте следующий код в свою тему (детская тема, если есть) functions.php или в любой пользовательский плагин
add_filter('rest_endpoints', function( $endpoints ) {
foreach( $endpoints as $route => $endpoint ){
if( false !== stripos( $route, '/wp/' ) ){
unset( $endpoints[ $route ] );
}
}
return $endpoints;
});