Вопрос или проблема
У меня есть пользовательское поле в стандартной базе данных, называемое 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
и выводить список пользователей, соответствующих этому критерию.
Шаги для реализации:
- Добавьте шорткод в файл вашей темы, обычно в
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 — это эффективный способ динамически отображать информацию без необходимости редактирования файлов шаблонов. Этот метод облегчит управление контентом и улучшит взаимодействие с пользователями.
Не забывайте тестировать ваш шорткод после внесения изменений, чтобы убедиться, что он работает корректно и отображает ожидаемую информацию.