Как проверить возможность пользователя при загрузке страницы (через functions.php)?

Мне нужно ограничить пользователей, не имеющих определенной возможности, видеть конкретную страницу. Я не могу использовать короткие коды или что-то в этом роде, я просто хочу перенаправить их, если они попадут на этот URL-адрес страницы.

Я хочу сделать это, добавив что-то в свой файл functions.php … Я бы предположил, что код будет чем-то вроде …

// hook on_page_load() into wordpress page load function on_page_load($current_page_ID) { if( $current_page_ID == 1234 && is_user_logged_in() && current_user_can('do_something_special')) { return; // allow it to continue } else { // otherwise die(); // or redirect or whatever } } 

Я не могу понять, как перехватить каждую загрузку страницы, чтобы увидеть, идут ли они на страницу сообщений. Может кто-нибудь помочь? Или есть более элегантный способ добиться этого? Благодарю.

Solutions Collecting From Web of "Как проверить возможность пользователя при загрузке страницы (через functions.php)?"

Если вы хотите перенаправить, хорошим примером для использования является template_redirect :

 add_action( 'template_redirect', 'my_page_template_redirect' ); function my_page_template_redirect() { // You can skip is_user_logged_in() if checking the user capability if( is_page( 1234 ) && ! current_user_can( 'do_something_special' ) ) { $redirect_to = 'http://example.com/redirection-page'; // Default code status for redirection using wp_redirect is 302 // If you need a different status code check // https://codex.wordpress.org/Function_Reference/wp_redirect wp_redirect( esc_url_raw( $redirect_to ) ); exit(); } } 

Более подробную информацию о template_redirect вы можете найти в Codex .

Поскольку ваш вопрос касался «перехвата загрузки каждой страницы», я думаю, вы должны начать читать эти записи в Codex:

  1. API-интерфейс плагина
  2. Ссылка на определение действия и действия
  3. Ссылка на определение фильтра и фильтра

В основном, действия – это события, которые происходят, когда WordPress обрабатывает запрос. Каждый из них подходит для «перехвата» запроса и выполнения действий. Поскольку они происходят в разные моменты, вы можете выбрать лучшее действие для использования в зависимости от того, что вам нужно делать.

В этом случае о перенаправлении, когда запрашивается какая-либо страница, и у пользователя есть определенная возможность, template_redirect может быть очень подходящим моментом для перехвата запроса. Согласно документации этого действия: «Это хороший крючок для использования, если вам нужно сделать переадресацию с полным знанием содержимого, которое было запрошено».