基于自定义字段true/false隐藏用户


WordPress: Hiding user based on custom field true/false

我已经编写了一些代码,为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,以便函数知道您不是试图获取帖子。

更多信息可以在他们的文档中找到