Intereting Posts
Как вырезать окно Last Widget из той же области виджета? Какие типы контента отображаются на странице поиска? Можно ли переместить wordpress из webroot? Страница администратора: форма с enctype = "multipart / form-data" не передает данные Я блокирую содержимое сайта, нажимаю на сообщение, перенаправляю логин, вводим пароль uname +, но не перенаправляю статью Изменить заголовок (логотип) на основе входа mod_rewrite loop, перенаправление http на https на определенную часть блога wordpress Как работать с WordPress и Pocket API для автоматизации контентов контента в моем блоге WordPress? Захват после создания мета Как захватить определенную страницу контента из разбивки на страницы? проверьте, является ли пользователь владельцем текущей страницы Можно использовать pagename внутри get_template_part? изменить значение по умолчанию HAVE_POSTS () Loop без вставки новой переменной (то есть $ loop-> HAVE_POSTS) Оптимизация скорости $ wpdb-> get_results Перенаправление на пользовательскую страницу

Показывать конечную точку пользовательского сообщения в REST API, только если пользователь имеет возможность

Я создал пользовательский тип сообщения для WP, который должен быть доступен для пользователя, у которого есть пользовательская возможность read_cpt . Внутри шаблонов и pre_get_posts я могу запускать проверки для включения или исключения CPT с помощью current_user_can() .

Я не хочу, чтобы CPT, даже конечная точка, отображались в REST API, чтобы держать его в секрете, если пользователь не имеет пользовательских возможностей.

Единственный способ, который я мог бы выяснить, чтобы скрыть конечные точки API для запуска этого кода.

Регистрация типа сообщения для «классического» WP:

 function add_post_type() { $args = array( [...] 'public' => false, 'has_archive' => false, 'exclude_from_search' => true, 'publicly_queryable' => false, 'show_in_rest' => false, ); register_post_type( 'cpt', $args ); } add_action( 'init', 'add_post_type', 0 ); 

и отдельно добавьте его в REST API:

 add_action( 'init', 'cpt_rest_support', 25 ); function cpt_rest_support() { global $wp_post_types; if ( current_user_can( 'read_addresses' ) ) { //be sure to set this to the name of your post type! $post_type_name = 'address'; if( isset( $wp_post_types[ 'cpt' ] ) ) { $wp_post_types[ 'cpt' ]->show_in_rest = true; } } } 

Создав собственный класс WP_REST_Posts_Controller я не смог найти способ скрыть конечную точку, изменив любой из *_permissions_check

Есть ли что-то вроде аргумента show_in_rest_permition_check для register_post_type() или описанный способ единственный метод?

API REST не имеет параметров, вариантов для решения этой проблемы – на мой взгляд. Но вы должны зарегистрироваться только в том случае, если у пользователей есть возможность в его роли, как в следующем примере.

 add_action( 'rest_api_init', function() { // Exit, if the logged in user have not enough rights. if ( ! current_user_can( 'edit_posts' ) ) { return; } // Register Meta Data. register_meta( 'post', 'foo', array( 'show_in_rest' => true, )); }); 

Это приводит к сбою пользовательских данных только в остальном api, если у пользователя достаточно прав, возможностей в его роли. Мой register_meta() является только примером, который также должен работать с вашим дополнительным параметром для register_post_type , например $wp_post_types[ 'cpt' ]->show_in_rest = true; ,