Список пользователей, отсортированный по метаданным пользователя

Вопрос или проблема

Я создал систему голосования для пользователей, которая позволяет голосовать за пользователей или авторов постов. Например, у нас есть 4 пользователя, которые выглядят так:

  1. пользователь — ID=1 — META KEY=’_thumbs_rating_up’ — META VALUE=’13’

  2. пользователь — ID=2 — META KEY=’_thumbs_rating_up’ — META VALUE=’17’

  3. пользователь — ID=3 — META KEY=’_thumbs_rating_up’ — META VALUE=’8′

  4. пользователь — 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 все еще не является частью основного запроса 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 'Пользователи не найдены.';
}
?>

Объяснение изменений:

  1. Добавил параметр 'order' => 'DESC' — это необходимо для сортировки значений от большего к меньшему. Без этого указания запрос будет по умолчанию сортировать данные по возрастанию.

  2. Убедитесь, что порядок соответствующего мета значения (meta_value_num) правильно указывается, чтобы WP_Query мог корретно обработать его.

  3. Вывод информации о каждом пользователе остался без изменений, так как он правильно работает для отображения аватара, мета-значения и имени пользователя.

Теперь ваш код должен правильно сортировать пользователей по мета-значению _thumbs_rating_up. Если у вас остались вопросы или возникли другие проблемы, дайте знать!

Оцените материал
Добавить комментарий

Капча загружается...