wp_get_current_user不起作用

时间:2019-02-26 06:35:47

标签: php wordpress

我有以下内容:

<?php $roles = array('silver_user','gold_user');
$user = wp_get_current_user();
foreach ($roles as $role){
if ( !in_array( $role, (array) $user->roles ) ) {
 echo '<i style="color:red;font-size:12px;">(CURRENT)</i>';
}
} ?>

应检查当前用户是否没有silver_user或gold_user角色。但是,无论我是否删除!in_array标记,它仍然显示CURRENT文本。我缺少明显的东西吗?

4 个答案:

答案 0 :(得分:0)

您需要使用以下内容

<?php 
    $roles = array('silver_user','gold_user');
    $user = wp_get_current_user();

    if ( !in_array( $user->roles, $roles  ) ) {
        echo '<i style="color:red;font-size:12px;">(CURRENT)</i>';
    }

?>

答案 1 :(得分:0)

我猜$ user的角色是silver_user或gold_user。因此,当您使用循环时,无论!in_array是否都将始终显示CURRENT。

答案 2 :(得分:0)

应该从wp_get_current_user()动作中调用函数init。您可能需要将所有代码移到从init调用的函数中。

您还可以使用WP本机功能current_user_can()来检查角色。这是示例

add_action('init', 'is_eligible_user');
function is_eligible_user(){

    $roles = array('silver_user', 'gold_user', 'author', 'administrator');

    $user = wp_get_current_user();
    foreach( $roles as $role ) {
        if ( current_user_can( $role ) ) {
            echo "user has privilege"; break;
        }
    }
    return false;
}

答案 3 :(得分:0)

    $roles = array('silver_user', 'gold_user');

    $user = wp_get_current_user();

    if(!empty($user->roles)){    

    foreach ($roles as $role) {

        if (in_array($role, (array) $user->roles)) {

            echo '<i style="color:red;font-size:12px;">(CURRENT)</i>';
        }
      }
    }