修复错误的用户角色输出

时间:2019-08-15 17:45:17

标签: php wordpress foreach

我正在尝试将具有特定角色的特定用户定位在页面上。当我输出数据时,所有用户都应显示“作者”,但如果不是管理员,则应显示“管理员”。

这是我使用的代码:

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

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

谢谢。

3 个答案:

答案 0 :(得分:0)

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

为什么:您的函数不需要任何参数。

解决方案:不要像使用array_shift那样使用array_filter: 我假设您有一个使用方法getRole()的User类。并且您的$ authordata包含一个User对象数组。

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

答案 1 :(得分:0)

主要问题是您使用的角色贡献者。是贡献者。

<?php 
      $users = array_merge( get_users( 'role=author&order=ASC' ), get_users( 'role=contributor&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($user);
    ?>

        <div class="card default">
          <div class="info">
            <p class="title"><?php echo $authorRole;?></p>
          </div>
        </div>
    <?php 
    function get_author_role($user) {
        global $authordata;

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

        return $author_role;
      }

?>

答案 2 :(得分:0)

感谢大家的帮助,尽管他们对我的特定应用程序无效,但以下内容可以帮助您。在这些建议 did 之后进行故障排除,但我却找到了这个解决方案。

保持相同的功能:

  function get_author_role() {

    global $authordata;

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

    return $author_role;
  }

但是将我的foreach更改为:

$authorID = $user->ID;
$authorMeta = get_userdata( $authorID );
$authorRole = $authorMeta->roles;

这捕获了阵列中的所有潜在角色。然后,我可以将这些结果插入以逗号分隔的列表中,显示每个值。

<p class="title"><?php echo implode(", ", $authorRole);?></p>

再次感谢!