修复不正确的用户角色输出

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


这是我使用的代码:


<?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;

  }


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


谢谢你。


呼啦一阵风
浏览 164回答 3
3回答

幕布斯6054654

问题来自您的 get_author_role 函数。此函数将返回第一个用户角色 [在您的情况下为管理员]。为什么:您的函数不需要任何参数。解决方案:不要使用array_shift,而是使用array_filter,例如:我假设您有一个带有方法getRole() 的User 类。你的 $authordata 包含一个 User 对象数组。&nbsp; &nbsp; &nbsp;function get_author_role(int $userId) {&nbsp; &nbsp; &nbsp; &nbsp; global $authordata;&nbsp; &nbsp; &nbsp; &nbsp; $author_roles = $authordata;&nbsp; &nbsp; &nbsp; &nbsp; $author_role = array_filter($author_roles, function(User $user) use ($userId) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return $user->getRole();&nbsp; &nbsp; &nbsp; &nbsp; });&nbsp; &nbsp; &nbsp; &nbsp; return $author_role;&nbsp; &nbsp; }

智慧大石

虽然它们不适用于我的特定应用程序,但以下方法适用。在这些建议之后进行故障排除确实让我找到了这个解决方案。保持函数不变:&nbsp; function get_author_role() {&nbsp; &nbsp; global $authordata;&nbsp; &nbsp; $author_roles = $authordata->roles;&nbsp; &nbsp; $author_role = array_shift($author_roles);&nbsp; &nbsp; return $author_role;&nbsp; }但是将我的更改foreach为:$authorID = $user->ID;$authorMeta = get_userdata( $authorID );$authorRole = $authorMeta->roles;这捕获了阵列中的所有潜在角色。然后我能够将这些结果内爆到一个逗号分隔的列表中,显示每个值。<p class="title"><?php echo implode(", ", $authorRole);?></p>再次感谢!

交互式爱情

主要问题是您使用的角色贡献者。它是贡献者。<?php&nbsp;&nbsp; &nbsp; &nbsp; $users = array_merge( get_users( 'role=author&order=ASC' ), get_users( 'role=contributor&order=ASC' ) );&nbsp; &nbsp; &nbsp; usort($users, create_function('$a, $b', 'return strnatcasecmp($a->last_name, $b->last_name);'));&nbsp; &nbsp; &nbsp; foreach($users as $user) :&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; $authorID = $user->ID;&nbsp; &nbsp; &nbsp; &nbsp; $authorRole = get_author_role($user);&nbsp; &nbsp; ?>&nbsp; &nbsp; &nbsp; &nbsp; <div class="card default">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <div class="info">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <p class="title"><?php echo $authorRole;?></p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>&nbsp; &nbsp; &nbsp; &nbsp; </div>&nbsp; &nbsp; <?php&nbsp;&nbsp; &nbsp; function get_author_role($user) {&nbsp; &nbsp; &nbsp; &nbsp; global $authordata;&nbsp; &nbsp; &nbsp; &nbsp; $author_roles = $user->roles;&nbsp; &nbsp; &nbsp; &nbsp; $author_role = array_shift($author_roles);&nbsp; &nbsp; &nbsp; &nbsp; return $author_role;&nbsp; &nbsp; &nbsp; }?>
打开App,查看更多内容
随时随地看视频慕课网APP