Статьи

Использование WordPress для разработки веб-приложений: WP_User_Query

В этой серии мы рассмотрели, как WordPress можно использовать для разработки веб-приложений, так же как и ряд различных фреймворков и других доступных инструментов.

Начиная с последней статьи, мы начали рассматривать различные варианты, которые у нас есть, поскольку они связаны с запросом данных WordPress. Сначала мы рассмотрели WP_Query .

В этой статье мы продолжим рассмотрение доступных опций для извлечения информации из базы данных, посмотрев на WP_User_Query после чего WP_User_Query наше внимание на то, как мы можем запускать прямые запросы SQL к базе данных.

Но сейчас давайте посмотрим, что WordPress предлагает нам для управления нашими пользователями, их информацией и связанными с ними метаданными.

Прежде чем мы перейдем к обсуждению реального API, давайте быстро рассмотрим некоторую информацию о базе данных WordPress, чтобы мы установили общий уровень информации, от которого можно работать до конца статьи, API и примеров, которые мы » буду прикрывать.

В последней статье мы упомянули три конкретных момента:

  1. Запрос к базе данных WordPress относится к процессу извлечения информации из базы данных (как в случае с остальными веб-приложениями, поддерживаемыми базой данных).
  2. Существует несколько способов сделать запрос к базе данных — некоторые из которых более верны, чем другие в некоторых ситуациях, и нам нужно понять, какие способы подходят для наилучшей ситуации.
  3. Важно понимать API, чтобы мы знали, что нам доступно, какие преимущества предлагает каждый, и какие ситуации лучше всего подходят для данного API.

Когда мы рассмотрели WP_Query , мы рассмотрели, как его можно использовать для получения сообщений, страниц, пользовательских типов сообщений, связанных таксономий, категорий, терминов и так далее.

Точно так же WP_User_Query предлагает большую часть той же функциональности, но в контексте пользователей. Кодекс определяет запрос:

WP_User_Query — это класс …, который позволяет запрашивать таблицы базы данных WordPress «wp_users» и «wp_usermeta».

В отличие от WP_Query определения WP_Query , оно менее техническое и относительно простое для понимания, особенно если вы знакомы с таблицей wp_users и таблицами wp_usermetadata .

Но если нет, то ничего страшного: мы рассмотрим все, что нужно не только для понимания таблиц, но и для понимания API.

Таблица wp_users и таблицы wp_usermetadata отвечают за хранение пользовательских данных.

Информация для каждой из таблиц доступна в Кодексе (который вы можете найти здесь и здесь ), и я рекомендую всем просмотреть ее; однако информация о каждой таблице может быть упрощена следующим образом:

  • Таблица пользователей содержит список пользователей в системе и минимальный объем информации, чтобы предоставить пользователю доступ к WordPress. Это включает в себя автоматически назначенный идентификатор, их логин, пароль, способ отображения их имени, адрес электронной почты, когда они зарегистрированы, их статус и URL-адрес их сайта (если указан).
  • Таблица usermeta используется для хранения более общей информации через простые пары ключ / значение. То есть, как и с данными постов, мы можем связывать информацию с пользователями, используя их идентификаторы, мета-ключи и мета-значения.

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

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

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

Теперь, что касается аргументов, можно указать все, что содержится в связанных таблицах базы данных. Например, вы можете искать, используя:

  • роль пользователя,
  • совпадения строк в столбцах (например, идентификатор, логин, URL и т. д.),
  • Адрес электронной почты,
  • и так далее.

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

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

Конечно, что толку говорить об API, не задумываясь о том, как его использовать? В следующем примере мы возьмем пример учетных записей пользователей, а затем итерируем запрос, пока не создадим тот, который пытается продемонстрировать множество функций, которые он предоставляет.

С учетом сказанного, скажем, что мы хотим добиться следующего:

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

Итак, начнем. Помните, что мы будем строить этот запрос построчно, поэтому его будет относительно легко понять, так как он продолжает развиваться.

Если в какой-то момент у вас есть вопросы о том, что происходит, не стесняйтесь оставлять их в комментариях.

Во-первых, мы хотим указать, что мы хотим включить всех администраторов:

1
2
3
4
$args = array(
  ‘role’ => ‘Administrator’
);
$user_query = new WP_User_Query( $args );

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

В частности, мы будем просить получить всех администраторов, у которых есть имя, которое указано (или, скорее, не пустое).

1
2
3
4
5
6
7
8
9
$args = array(
  ‘role’ => ‘Administrator’,
  ‘meta_query’ => array(
                        ‘meta_key’ => ‘first_name’,
                        ‘meta_value’ => »
                        ‘meta_compare’ => ‘!=’
                     )
);
$user_query = new WP_User_Query( $args );

Далее мы собираемся упорядочить результаты по дате регистрации администратора в порядке возрастания:

01
02
03
04
05
06
07
08
09
10
11
$args = array(
  ‘role’ => ‘Administrator’,
  ‘meta_query’ => array(
                        ‘meta_key’ => ‘first_name’,
                        ‘meta_value’ => »
                        ‘meta_compare’ => ‘!=’
                     )
  ‘orderby’ => ‘registered’,
  ‘order’ => ‘ASC’
);
$user_query = new WP_User_Query( $args );

И наконец, мы скажем, что мы хотим отозвать пять записей одновременно:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// The number of records to display on a page
$display_count = 5;
 
// We need to get the number of the current page we’re on.
// This is useful for calculating the proper offset
$page = get_query_var( ‘paged’ ) ?
 
// After that, calculate the offset
$offset = ( $page — 1 ) * $display_count;
 
$args = array(
  ‘role’ => ‘Administrator’,
  ‘meta_query’ => array(
                        ‘meta_key’ => ‘first_name’,
                        ‘meta_value’ => »
                        ‘meta_compare’ => ‘!=’
                     )
  ‘orderby’ => ‘registered’,
  ‘order’ => ‘ASC’,
  ‘number’ => $display_count
  ‘offset’ => $offset
);
$user_query = new WP_User_Query( $args );

И мы сделали. Теперь нужно выполнить итерацию запроса, чтобы вывести наши результаты. К сожалению, у всех нас может быть другой взгляд на то, как мы хотим это сделать, поэтому обратите внимание, что цикл, который я показываю, является всего лишь одним примером (по сравнению с примером):

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
// If there are results based on our criteria…
$results = »;
if ( ! empty( $user_query->results ) ) {
 
    // For each of the results, let’s display the administrators name
    foreach ( $user_query->results as $user ) {
 
         $results .= ‘The Display Name is: ‘ .
         $results .= ‘<br />’;
         $results .= get_user_meta( $user->ID, ‘first_name’, true );
         $results .= ‘<br />’;
 
    }
 
    // Display the information on the screen.
    echo $results;
 
}

И обратите внимание: одно отличие WP_User_Query от WP_Query заключается в том, что нет необходимости сбрасывать какие-либо почтовые данные, потому что мы не работаем ни с чем, кроме замкнутого цикла.

В этот момент естественно возникает квест о том, когда хорошая идея использовать WP_User_Query , и вы, вероятно, получите разные ответы от разных людей, например, предварительный просмотр с использованием других методов для получения их информации.

Но, вообще говоря, если я собираюсь получать информацию из базы данных, которая имеет дело напрямую и строго с пользователями, то я использую WP_User_Query .

Теперь, поскольку набор результатов может быть возвращен способом, который технически может быть объединен или, по крайней мере, переработан с другим набором данных, то это определенно возможно сделать; однако я лично считаю, что для этого требуется немного опыта, который может не соответствовать всем требованиям.

Другими словами, не стесняйтесь использовать его по своему усмотрению, но относитесь к нему с осторожностью.

Итак, с WP_Query и WP_User_Query позади, у нас есть еще один API, на который мы можем посмотреть, чтобы WP_User_Query наше обсуждение, и это возможность напрямую запрашивать базу данных WordPress.

В заключительной статье, посвященной запросам, мы рассмотрим этот API, завершим наше обсуждение и затем перейдем к окончательному обзору всего, что мы рассмотрели в этой серии.