Как вывести пользователей по пользовательскому полю?

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

У меня есть пользовательское поле в стандартной базе данных, называемое company.
Я хочу вывести на страницу информацию о пользователях, у которых company совпадает с Widgets Inc

Как мне это сделать?

На самом деле, мне бы хотелось избежать размещения этого в шаблоне страницы и вместо этого создать шорткод для списка информации о пользователях с функциональностью ограничения по атрибуту поля – т.е. {listusers company="Widgets Inc"}

Но я не знаю, как это сделать.

Чтобы получить пользователей с определенным мета-полем, вы можете использовать класс WP_User_Query. Посмотрите документацию для этого.

Таким образом, вы можете создать пользовательский шорткод следующим образом:

add_shortcode( 'listusers', 'wpse8170_listusers' );
function wpse8170_listusers( $atts, $content="" ) {
    $atts = shortcode_atts( array( 'company' => false ), $atts );

    if ( empty( $atts['company'] ) ) return $content;

    $query = new WP_User_Query( array(
        'meta_key' => 'company', 
        'meta_value' => $atts['company'],
    ) );

    ob_start();

    // отобразите список пользователей здесь

    return ob_get_clean();
}

Ответ или решение

Для того чтобы вывести информацию о пользователях, чье значение пользовательского поля company совпадает с заданным значением (например, Widgets Inc), используется класс WP_User_Query в WordPress. Это позволяет вам выполнять запросы к базе данных, специфичным образом фильтруя пользователей на основании их пользовательских метаданных.

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

Можно создать шорткод, который будет отображать информацию о пользователях на странице. Данный шорткод будет принимать атрибут company и выводить список пользователей, соответствующих этому критерию.

Шаги для реализации:

  1. Добавьте шорткод в файл вашей темы, обычно в functions.php:
add_shortcode('listusers', 'wpse8170_listusers');

function wpse8170_listusers($atts, $content = "") {
    // Задаем атрибуты шорткода, с установкой по умолчанию
    $atts = shortcode_atts(array('company' => false), $atts);

    // Проверяем, передано ли значение для "company"
    if (empty($atts['company'])) return $content;

    // Создаем новый экземпляр WP_User_Query
    $query = new WP_User_Query(array(
        'meta_key' => 'company',
        'meta_value' => $atts['company'],
    ));

    // Получаем пользователей
    $users = $query->get_results();

    // Начинаем захват вывода для рендеринга
    ob_start();

    // Проверяем, найдены ли пользователи
    if (!empty($users)) {
        echo '<ul>';
        foreach ($users as $user) {
            echo '<li>' . esc_html($user->display_name) . ' - ' . esc_html(get_user_meta($user->ID, 'company', true)) . '</li>';
        }
        echo '</ul>';
    } else {
        echo '<p>Пользователи не найдены.</p>';
    }

    // Возвращаем захваченный вывод
    return ob_get_clean();
}

Объяснение кода:

  • add_shortcode: Эта функция регистрирует новый шорткод listusers, который будет использовать функцию wpse8170_listusers.

  • shortcode_atts: Эта функция обрабатывает атрибуты шорткода, задавая значение по умолчанию для company.

  • WP_User_Query: Создается новый запрос к базе данных для получения пользователей с соответствующим значением в метаполе company.

  • get_results(): Возвращает массив объектов пользователей, соответствующих критериям запроса.

  • ob_start() и ob_get_clean(): Позволяют захватить вывод и вернуть его в конце функции, что полезно для использования в шорткодах.

Как использовать шорткод:

Теперь вы можете использовать шорткод в любом месте вашего контента WordPress, просто добавив следующую строку:

[listusers company="Widgets Inc"]

Заключение

Создание шорткода для вывода пользователей по кастомному полю в WordPress — это эффективный способ динамически отображать информацию без необходимости редактирования файлов шаблонов. Этот метод облегчит управление контентом и улучшит взаимодействие с пользователями.

Не забывайте тестировать ваш шорткод после внесения изменений, чтобы убедиться, что он работает корректно и отображает ожидаемую информацию.

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

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