Вопрос или проблема
Я создал систему голосования для пользователей, которая позволяет голосовать за пользователей или авторов постов. Например, у нас есть 4 пользователя, которые выглядят так:
-
пользователь — ID=1 — META KEY=’_thumbs_rating_up’ — META VALUE=’13’
-
пользователь — ID=2 — META KEY=’_thumbs_rating_up’ — META VALUE=’17’
-
пользователь — ID=3 — META KEY=’_thumbs_rating_up’ — META VALUE=’8′
-
пользователь — ID=4 — META KEY=’_thumbs_rating_up’ — META VALUE=’241′
Мне нужно отсортировать этих пользователей по мета-ключу и мета-значению от highest до lowest. У меня есть следующий код, но порядок неправильный:
<?php
$args = array(
'role' => 'Продавец',
'meta_key' => '_thumbs_rating_up',
'orderby' => 'meta_value_num'
);
// Запрос
$user_query = new WP_User_Query( $args );
// Цикл пользователей
if ( ! empty( $user_query->results ) ) {
foreach ( $user_query->results as $user ) {
echo '<p>' . get_avatar( $user->ID, 32 ) . '</p>';
echo '<p>' . get_user_meta($user->ID, '_thumbs_rating_up', true). '</p>';
echo '<p>' . $user->display_name . '</p>';
}
} else {
echo 'Пользователи не найдены.';
}
?>
Что я делаю неправильно или просто не могу отсортировать мой пользовательский мета-ключ??????
- Я нашел пост здесь, который похож, но не знаю, как помочь с этими ответами: Сортировка пользователей по meta_value_num
Ссылка, которую вы предоставили, имеет отношение, но здесь не нужна.
meta_value_num
все еще не является частью основного запроса user_query, поэтому ваш параметр meta_value_num не влияет на запрос.
Просто используйте meta_value
как описано в справочной документации, и вы получите то, что хотите.
Вам может не хватать ORDER = DESC. Попробуйте это
<?php
$args = array(
'role' => 'Продавец',
'meta_key' => '_thumbs_rating_up',
'orderby' => 'meta_value_num',
'order' => 'DESC'
);
Ответ или решение
Для того чтобы корректно отсортировать пользователей по пользовательскому мета-ключу и мета-значению, вам необходимо внести несколько изменений в ваш код. Обратите внимание, что параметр orderby
должен быть настроен на meta_value_num
, и вы должны указать порядок сортировки как DESC
, чтобы сортировка проходила от наибольшего к наименьшему значению.
Вот исправленный код:
<?php
$args = array(
'role' => 'Seller',
'meta_key' => '_thumbs_rating_up',
'orderby' => 'meta_value_num',
'order' => 'DESC', // Укажите порядок сортировки, DESC для от большого к меньшему
);
// Выполнение запроса
$user_query = new WP_User_Query( $args );
// Цикл по пользователям
if ( ! empty( $user_query->results ) ) {
foreach ( $user_query->results as $user ) {
echo '<p>' . get_avatar( $user->ID, 32 ) . '</p>';
echo '<p>' . get_user_meta($user->ID, '_thumbs_rating_up', true) . '</p>';
echo '<p>' . $user->display_name . '</p>';
}
} else {
echo 'Пользователи не найдены.';
}
?>
Объяснение изменений:
-
Добавил параметр
'order' => 'DESC'
— это необходимо для сортировки значений от большего к меньшему. Без этого указания запрос будет по умолчанию сортировать данные по возрастанию. -
Убедитесь, что порядок соответствующего мета значения (
meta_value_num
) правильно указывается, чтобы WP_Query мог корретно обработать его. -
Вывод информации о каждом пользователе остался без изменений, так как он правильно работает для отображения аватара, мета-значения и имени пользователя.
Теперь ваш код должен правильно сортировать пользователей по мета-значению _thumbs_rating_up
. Если у вас остались вопросы или возникли другие проблемы, дайте знать!