首页 > 解决方案 > 修复不正确的用户角色输出

问题描述

我正在尝试针对具有某些角色的特定用户在页面上显示它们。当我输出数据时,所有用户都应该显示“作者”,而不是当他们不是管理员时显示“管理员”。

这是我使用的代码:

<?php 
  $users = array_merge( get_users( 'role=author&order=ASC' ), get_users( 'role=contributors&order=ASC' ) );
  usort($users, create_function('$a, $b', 'return strnatcasecmp($a->last_name, $b->last_name);'));
  foreach($users as $user) : 

    $authorID = $user->ID;
    $authorRole = get_author_role($authorID);
?>

    <div class="card default">
      <div class="info">
        <p class="title"><?php echo $authorRole;?></p>
      </div>
    </div>

编辑:添加了 Get_author_role 函数

  function get_author_role() {
    global $authordata;

    $author_roles = $authordata->roles;
    $author_role = array_shift($author_roles);

    return $author_role;
  }

此方法适用于所有其他变量,例如姓名、电子邮件、图片等。我不确定为什么会发生这种情况。任何帮助表示赞赏。

谢谢你。

标签: phpwordpressforeach

解决方案


问题来自您的 get_author_role 函数。此函数将返回第一个用户角色 [在您的情况下为管理员]。

原因:您的函数不需要任何参数。

解决方案:不要使用array_shift,而是使用array_filter:我假设你有一个带有getRole()方法的用户类。您的 $authordata 包含一个用户对象数组。

     function get_author_role(int $userId) {
        global $authordata;

        $author_roles = $authordata;
        $author_role = array_filter($author_roles, function(User $user) use ($userId) {
            return $user->getRole();
        });

        return $author_role;
    }

推荐阅读