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



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

这是我使用的代码:

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

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

谢谢。

问题来自您的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;
}

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

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

?>

谢谢大家的帮助,虽然他们不适用于我的特定应用程序,但以下内容确实如此。不过,在这些建议之后进行故障排除确实使我找到了此解决方案。

保持函数相同:

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>

再次感谢!

最新更新