Intereting Posts
Установка страницы по умолчанию в режиме предварительного просмотра пользовательских настроек Должен ли я запускать две разные «близкие» версии кода WordPress с той же БД Вернитесь туда, где был пользователь, после выхода из системы Как я могу сделать число просмотров для просмотра доступным? Запрос определенных тегов Функция перенаправления внутри короткого кода Как изменить slug для сообщений wp по умолчанию, не влияя на другие сообщения? Элементы меню Nav исчезают (но не сразу) RSS Feed Пусто в Firefox Отображение избранных продуктов через пользовательский цикл в WooCommerce 3 Как применить фильтр ко всему? Почему атрибут заголовка Auto применяется к данным Post? Название Случайные элементы меню WordPress Создайте подстраницу / пользователь / или / my-profile / like / author / с дополнительным запросом вроде / user / user123 неправильный шаблон для страницы архива

Внутреннее подключение пользовательских таблиц для выбора пользователей с ролями

Я пытаюсь просмотреть список пользователей (которые являются исполнителями музыки) со следующей функцией.

function show_authors($ltr) { global $wpdb; $querystr = "SELECT $wpdb->users.* FROM $wpdb->users WHERE $wpdb->users.display_name LIKE '$ltr%' ORDER BY $wpdb->users.display_name"; /** $querystr = " SELECT * FROM $wpdb->users INNER JOIN $wpdb->usermeta.meta_value ON $wpdb->users.user_id = $wpdb->usermeta.user_id AND $wpdb->usermeta.meta_key = 'wp_capabilities' AND $wpdb->usermeta.meta_value = %artist% WHERE $wpdb->users.display_name LIKE '$ltr%' AND $wpdb->usermeta.meta_key = 'wp_capabilities' AND $wpdb->usermeta.meta_value LIKE '%artist%' ORDER BY $wpdb->users.display_name ASC "; **/ $users = $wpdb->get_col($querystr); echo "<ul style=\"list-style-type: none;\">"; foreach($users as $user) { $user = get_userdata($user); $post_count = get_usernumposts($user->ID); echo '<li><i class="fa fa-user"></i> <a href="' . get_author_posts_url($user->ID, $user->user_nicename) . '"> ' . $user->first_name . ' ' . $user->last_name . '</a> ('. $post_count .' songs)</li>'; } echo "</ul>"; } 

Я попробовал inner join с таблицей usermeta, чтобы я мог выбрать нужных пользователей с помощью meta_key именем wp_capabilities, который имеет имя роли пользователя в поле meta_value .

Показанный код работает отлично. Когда я пытаюсь использовать запрошенный комментарий, результат пуст. Что я могу делать неправильно? Или есть эффективный или лучший способ достичь этого?

Solutions Collecting From Web of "Внутреннее подключение пользовательских таблиц для выбора пользователей с ролями"

Проблемы

Вы рискуете инъекцией SQL с вашей текущей настройкой:

 $wpdb->users.display_name LIKE '$ltr%' 

В вашем SQL-запросе также может возникнуть проблема:

 AND $wpdb->usermeta.meta_value = %artist% 

т.е. используя = вместо LIKE .

Вам также не хватает котировок: %\"artist\"% , чтобы исключить, например, bartist или fartist 😉

Но вам не нужно строить этот SQL-запрос вручную.

Лучшие альтернативы

Вы можете использовать класс WP_User_Query :

 $users = new WP_User_Query( [ 'role' => 'artist' ] ); 

или вместо этого используется оболочка get_users() :

 $users = get_users( [ 'role' => 'artist' ] ); 

Он будет генерировать SQL-запрос для вас, с INNER JOIN .