Свой роутер поверх WordPress с проверкой прав
Кабинет сотрудника не должен быть записью или страницей WordPress. Маршруты объявляются через add_rewrite_endpoint, а на template_include подменяется файл шаблона. Тут же живёт вся защита: неавторизованного уводит на вход, обычного пользователя — на общий дашборд, несуществующий вложенный адрес отдаёт честный 404, а не пустую страницу.
foreach ($_ROUTE_URL as $url) {
if (isset($wp_query->query[$url])) {
// вложенный адрес вида dashboard/payments
if (!empty($wp_query->query[$url])) {
$is_page = $url . '/' . $wp_query->query[$url];
if (in_array($is_page, $_ROUTE_URL)) {
if (!is_user_logged_in()) {
wp_redirect('/login/');
}
if (!current_user_can('administrator')) {
wp_redirect('/dashboard/');
}
$url = 'templates/dashboard/' . $wp_query->query[$url];
} else {
$wp_query->set_404();
status_header(404);
get_template_part(404);
}
}
}
}