为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
呼啦一阵风 2021-11-26 15:05:52
我正在尝试针对具有某些角色的特定用户在页面上显示它们。当我输出数据时,所有用户都应该显示“作者”,但当他们不是管理员时显示“管理员”。这是我使用的代码:<?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 回答

?
幕布斯6054654

TA贡献1876条经验 获得超7个赞

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


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


解决方案:不要使用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;

    }


查看完整回答
反对 回复 2021-11-26
?
智慧大石

TA贡献1946条经验 获得超3个赞

虽然它们不适用于我的特定应用程序,但以下方法适用。在这些建议之后进行故障排除确实让我找到了这个解决方案。


保持函数不变:


  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>

再次感谢!


查看完整回答
反对 回复 2021-11-26
?
交互式爱情

TA贡献1712条经验 获得超3个赞

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


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

      }

?>


查看完整回答
反对 回复 2021-11-26
  • 3 回答
  • 0 关注
  • 163 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信