WordPress: как получить полный путь на крюке 'init'? или это другой крючок предпочтительнее? - PullRequest
0 голосов
/ 09 апреля 2020

Я хотел бы перенаправить пользователей, если они не являются администраторами, и я делаю это в рамках функции add_action('init'...

Однако я бы не хотел перенаправлять пользователей, если путь URL-адреса похож на /wp-json(v1/... ( так что не пользователь, а пользовательский запрос REST API)

Как я могу получить запрошенный URL и принять решение по этому поводу? Должен ли я сделать это в init хуке?

        function redirect_users()
        {

            global $wp;
// $url = get_url();
// if ($url === 'whatever') {
//  return;
// }

            if (get_current_user_id()) {
                $user = get_userdata(get_current_user_id());
                $user_roles = $user->roles;
                if (!in_array('administrator', (array) $user_roles)) {
                    wp_logout();
                    wp_redirect($url);
                    exit;
                }
            }
        }
        add_action('init', '\kw_signup\redirect_non_admin_users', 15);

1 Ответ

0 голосов
/ 09 апреля 2020

Как я могу получить запрошенный URL-адрес и принять решение по нему?

Чтобы получить запрошенный URL-адрес, вы можете использовать суперглобальный $_SERVER. Хотя в вашей ситуации я бы предпочел использовать $wp->request, который включает в себя часть пути вашего URL.

Должен ли я сделать это в хуке init?

Я бы сказал, что наиболее подходящим крючком для перенаправлений является template_redirect.

Итак, все вместе:

<?php
namespace kw_signup;

add_action( 'template_redirect', __NAMESPACE__ . '\redirect_non_admin_users' );

function redirect_non_admin_users() {
  global $wp;

  // Check if the requested URL does not start with a specific string
  if ( ! preg_match( '/^wp-json\//', $wp->request ) ) {
    // URL is not a custom REST API request
    // Check if user is an administrator, redirect, …
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...