#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. Отлично, это сработало именно так, как требуется, большое вам спасибо!