WordPress: скрытие пользователя на основе пользовательского поля true / false

#php #wordpress

#php #wordpress

Вопрос:

Я взломал некоторый код для создания виджета боковой панели для WordPress, который отображает всех пользователей, не являющихся подписчиками (т.Е. редакторов, участников и администраторов) в списке.

Также отображается пользовательское поле для названия должности пользователя.

 user_role
 

Пользовательские поля создаются с помощью расширенного плагина пользовательских полей.

В настоящее время это отлично работает, однако теперь требуется скрывать определенных пользователей из списка. Я реализовал другое поле; поле true / false. Если флажок установлен, он должен отображать пользователя в списке.

 user_hide
 

В настоящее время все, что я пробовал, приводит к отображению пользователей или всех пользователей.

Ниже приведен пользователь foreach в его исходном состоянии, который будет показывать только пользователей, у которых нет роли «подписчика».

 foreach($allUsers as $currentUser)
{
    if(!in_array( 'subscriber', $currentUser->roles ))
    {
        $users[] = $currentUser;
    }
}
 

Теперь каким-то образом также необходимо «И если пользовательское поле равно true», но я понятия не имею, как это сделать, кроме как работать. В базе данных, в разделе user meta, ключ «author_hide» показывает значения «1» для true или «0» для false.

Я пробовал ниже, но он по-прежнему отображает тот же список пользователей, что и оригинал, несмотря на то, что он прошел через всех пользователей и пометил / сохранил, где это уместно:

 $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 ) amp;amp; $user_query)
    {
        $users[] = $currentUser;
    }
}
 

Есть идеи?

Ниже приведена текущая функция:

 function contributors() {

$allUsers = get_users('orderby=nameamp;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>';
 

}

Ответ №1:

Вы можете использовать расширенный API пользовательских полей для извлечения пользовательского поля для каждого пользователя, пока вы находитесь в цикле. Вот как я бы это сделал:

 foreach($allUsers as $currentUser) {

    $hide = get_field('user_hide', 'user_' . $currentUser->ID);

    if(!in_array( 'subscriber', $currentUser->roles ) amp;amp; !$hide ) {
        $users[] = $currentUser;
    }

}
 

Обратите внимание, что расширенные пользовательские поля требуют, чтобы вы добавляли свой идентификатор пользователя к строке user_ при вызове get_field() , чтобы функция знала, что вы не пытаетесь получить сообщение.

Более подробную информацию можно найти в их документации.

Комментарии:

1. Отлично, это сработало именно так, как требуется, большое вам спасибо!