我有一个代码片段,可以将所有用户重定向到维护页面。如何排除具有管理员角色的用户?

时间:2022-01-01 作者:Blue Li

我有一个片段,可以将所有用户重定向到维护页面。除了管理员用户之外,我如何对所有用户进行调整?

<?php

add_action( \'template_redirect\', function() {
    if ( is_page( 4848 ) ) {
        return;
    }
    wp_redirect( esc_url_raw( home_url( \'maintenance/\' ) ) );
    //wp_redirect( esc_url_raw( home_url( \'index.php?page_id=4848\' ) ) );
    exit;
} );

2 个回复
最合适的回答,由SO网友:Buttered_Toast 整理而成

我建议不要使用匿名函数进行回调(如果可以的话),因为不能使用目标函数remove_action 在上面
Maythan8回答的问题可以解决,但可以用较少的功能完成。

add_action(\'template_redirect\', \'bt_maintenance_redirect\');
function bt_maintenance_redirect () {
    if (is_page(4848) || current_user_can(\'administrator\')) return;
    if (wp_safe_redirect(esc_url(home_url(\'maintenance/\')))) exit;
}
您使用esc_url_raw 但如果url仅用于输出,则此函数用于在DB存储之前转义urlesc_url.
使用起来也更好wp_safe_redirect 如果您正在从同一主机重定向或重定向到同一主机。

SO网友:Maytha8

使用user_can( wp_get_current_user(), \'administrator\' ) 确定用户是否已登录并且是管理员。

add_action( \'template_redirect\', function() {
  if ( is_page( 4848 ) ) {
    return;
  }
  if (!user_can( wp_get_current_user(), \'administrator\' )) {
    wp_redirect( esc_url_raw( home_url( \'maintenance/\' ) ) );
  }
  exit;
} );