我已经编写了一些代码,为WordPress创建了一个侧边栏小部件,可以在列表中显示所有非订阅用户(即编辑,贡献者和管理员)。
它还为用户的职位显示一个自定义字段。
user_role
自定义字段是通过Advanced Custom fields插件创建的。
目前这个工作很好,但是现在有一个要求,从列表中隐藏特定的用户。我实现了另一个领域;一个真/假方框。当勾选时,它应该在列表中显示用户。
user_hide
目前,我所尝试的所有结果都是不显示用户,或显示所有用户。
下面是原始状态下的foreach用户,它将只显示没有"订阅者"角色的用户。
foreach($allUsers as $currentUser)
{
if(!in_array( 'subscriber', $currentUser->roles ))
{
$users[] = $currentUser;
}
}
现在不知何故,它还需要"AND如果自定义字段为真",但我不知道如何得到,但工作。在数据库中,在user meta下,键"author_hide"显示值"1"表示为真,或"0"表示为假。
我已经尝试了下面的操作,但它仍然显示与原始相同的用户列表,尽管已经遍历了所有用户并在适当的地方勾选/保存:
$user_query = new WP_User_Query( array( 'meta_key' => 'author_hide', 'meta_value' => '1','meta_compare' => '==' ) );
foreach($allUsers as $currentUser)
{
if(!in_array( 'subscriber', $currentUser->roles ) && $user_query)
{
$users[] = $currentUser;
}
}
任何想法?
下面是当前函数:
function contributors() {
$allUsers = get_users('orderby=name&order=ASC');
$users = array();
echo '<ul class="authors-list">';
foreach($allUsers as $currentUser)
{
if(!in_array( 'subscriber', $currentUser->roles ))
{
$users[] = $currentUser;
}
}
foreach($users as $user)
{
?>
<li class="author-left author-light rounded-corners">
<div class="rounded-corners">
<div class="rounded-corners">
<a href="<?php echo get_author_posts_url( $user->ID ); ?>">
<strong><?php echo $user->display_name; ?></strong>
<br>
<?php $user_role = get_user_meta($user->ID, 'author_role', true); if($user_role != '') { echo $user_role; } ?>
</a>
</div>
</div>
<div class="pic">
<a href="<?php echo get_author_posts_url( $user->ID ); ?>"><?php echo get_avatar( $user->user_email, '50' ); ?></a>
</div>
</li>
<?php
}
echo '</ul>';
}
你可以使用高级自定义字段API来获取每个用户的自定义字段,而你在循环中。我是这样做的:
foreach($allUsers as $currentUser) {
$hide = get_field('user_hide', 'user_' . $currentUser->ID);
if(!in_array( 'subscriber', $currentUser->roles ) && !$hide ) {
$users[] = $currentUser;
}
}
请注意,高级自定义字段要求您在调用get_field()
时使用字符串user_
前缀您的用户ID,以便函数知道您不是试图获取帖子。
更多信息可以在他们的文档中找到