Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. WordPress

Как работать с метаданными пользователя WordPress

by
Difficulty:BeginnerLength:LongLanguages:
This post is part of a series called How to Work with WordPress Metadata.
How to Work With WordPress Post Metadata
How to Work With WordPress Comment Metadata

Russian (Pусский) translation by Sergey Zhuk (you can also view the original English article)

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

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

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

Пользовательский мета-API WordPress

Напомним ранее в этой серии, WordPress определяет метаданные следующим образом:

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

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

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

Работа с API пользовательских метаданных

Рассматривая WordPress Post Meta API, мы рассмотрели и использовали следующие функции:

  • add_post_meta
  • update_post_meta
  • get_post_meta
  • delete_post_meta

Да, среди них есть свои особенности, особенно это касается того, как работают add_post_meta и update_post_meta, а также различные способы работы get_post_meta и delete_post_meta, и API-интерфейсы, которые мы собираемся изучить, будут работать одинаково.

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

Если вам интересно, я буду использовать следующий набор инструментов:

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

wp_usermeta

Это связано с некоторыми данными, хранящимися на экране профиля пользователя:

The User Profile Screen

Тем не менее API позволит нам записать нашу собственную информацию в таблицу. Итак, сказав это, давайте посмотрим, как работать с функциями, предоставляемыми WordPress.

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

Добавление метаданных пользователя

Вы можете найти ссылку на функцию add_user_meta в Codex. Определение функции примерно настолько сжато, насколько это возможно:

Добавить метаданные в запись пользователя.

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

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

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

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

Неуникальные значения

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

Код для этого будет выглядеть так:

Обратите внимание, что мы используем ту же стратегию, что и ранее в этой серии:

  1. Мы подключаемся к the_content.
  2. Мы проверяем, находимся ли мы в сообщении Hello World.
  3. Если это так, мы добавляем пользовательские метаданные.
  4. Мы возвращаем $content в WordPress.

С помощью этого кода и сообщения Hello World, загруженного в ваш браузер, обновите страницу несколько раз.

После этого итоговая таблица базы данных будет выглядеть так:

Non-unique Metadata

Как я уже сказал, он очень похоже на то, как работает API метаданных поста.

Уникальные значения

Используя интерфейс базы данных, удалите созданные строки или выберите новый ключ (возможно, что-то вроде instagram_username). Я собираюсь удалить строки.

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

Во-первых, укажите уникальное значение для метазначения (или третьего аргумента) в вызове функции. Обновите страницу несколько раз, а затем взгляните на базу данных. Она должен выглядеть примерно так:

Multiple Records

Обратили внимание, что интересно? Есть еще несколько значений, но они все одинаковые.

Попробуйте несколько раз изменить аргумент meta value, а затем взгляните на базу данных и вы увидите что-то вроде этого:

Unique Metadata

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

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

Обновление пользовательских метаданных

Аналогично тому, как работает Post Meta API, функциональность обновления работает следующим образом:

Обновление метаполя пользователя на основе идентификатора пользователя. Используйте параметр $prev_value, чтобы различать метаполя с одинаковым ключом и идентификатором пользователя. Если метаполя для пользователя не существует, оно будет добавлено.

При работе с этой функцией полезно рассматривать ее в двух сценариях:

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

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

Когда мы добавили метаданные

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

Database

И мы хотим обновить записи, которые имеют предыдущее значение https://twitter.com/tommcfarlin/. Для этого мы обновим код, который выглядит следующим образом.

И тогда обновление базы данных будет выглядеть так:

Updating User Meta Data

Обратите внимание, что это обновляет все значения, связанные с этим мета-ключом. Конечно, это только одна функция.

При добавлении новых метаданных

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

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

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

В этом случае мы сделаем следующее:

И это приводит к записи следующей записи в базу данных:

Updating user metadata

Если вы несколько раз обновляете страницу и затем проверяете свою таблицу базы данных, вы заметите, что записывается только один экземпляр значения в сравнении с несколькими значениями, которые поступают при использовании add_user_meta.

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

Получение пользовательских метаданных

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

Но как насчет мета значения?

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

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

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

Получение всех записей

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

Non-unique Meta Data

Чтобы получить всю эту информацию из базы данных и отобразить на экране, мы использовали бы следующий код:

Предполагая, что все прошло хорошо, вы должны увидеть что-то вроде этого в верхней части вашего сообщения Hello World:

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

Получение одиночной записи

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

И результат этого кода будет напечатан в верхней части сообщения Hello World, с которого мы работаем:

Обратите внимание, что если вы используете update_user_meta и не указываете true в качестве последнего параметра, вы получите массив с одним индексом, переданный вам.

Таким образом, если вы ищете строковое представление информации, всегда передавайте значение true.

Удаление пользовательских метаданных

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

Из сопроводительной страницы Codex:

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

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

Удаление нескольких записей

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

Multiple Records

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

И если вы обновите информацию в таблице базы данных, вы заметите, что все записи были удалены:

All records erased

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

Единая запись

Если, с другой стороны, у вас есть одна запись для удаления, то вам нужно три части информации:

  1. Идентификатор пользователя
  2. Мета ключ
  3. Мета-значение

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

Итак, в нашем примере предположим, что у нас есть две записи, каждая из которых имеет мета-ключ twitter_account. Каждый ключ имеет следующее значение:

  1. https://twitter.com/tommcfarlin
  2. https://twitter.com/pressware
Multiple Twitter Accounts

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

А затем, если вы обновите свою базу данных, вы увидите следующее (или нечто подобное):

A single record remains

Приятно, когда API выполняет то, что вы ожидаете.

Полный исходный код

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

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

Заключение

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

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

Конечно, это все еще оставляет нам метаданные, связанные с таксономиями. Из-за природы таксономий, терминов и API-интерфейсов мы рассмотрим их в последующих сериях.

А пока продолжайте экспериментировать с кодом, представленным в этой статье. Помните, что он предназначен только для демонстрационных целей и не должен выполняться в боевой среде.

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

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

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

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

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

Ресурсы

Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.