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 User Metadata

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

В этой серии мы рассмотрели ряд API-интерфейсов метаданных, предлагаемых WordPress. Это включает Post Meta API и User Meta API. Сегодня мы собираемся завершить серию, посмотрев на WordPress Comment Meta API.

Обратите внимание, что это последний API метаданных WordPress. Начиная с WordPress 4.4, теперь появился API метаданных Term. Чтобы полностью понять это, важно понять таксономию, термины и их отношения в контексте WordPress. В следующей серии я расскажу именно об этом.

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

Если вы все увязли, тогда давайте начнем.

Мета-API комментария WordPress

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

В частности, мы говорили:

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

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

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

И, как вы увидите, это по-прежнему имеет место с API метаданных комментариев.

Работа с API метаданных комментариев

Как и в других API, рассмотренных в этой серии, мы рассмотрим четыре основные функции:

  • add_comment_meta
  • update_comment_meta
  • get_comment_meta
  • delete_comment_meta

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

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

В остальной части этой статьи я предполагаю следующее:

  • У вас локальная среда разработки с веб-сервером, сервером базы данных и PHP.
  • У вас установлена копия WordPress.
  • У вас есть копия tutsplus-metadata.php, созданная в каталоге вашей темы, и она включена в файл functions.php вашей темы.
  • У вас есть готовый доступ к вашей IDE и доступному интерфейсу базы данных.

Как я уже говорил в предыдущих статьях, я использую следующие приложения:

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

An empty comment metadata table

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

Это хорошо, так как это даст нам чистый список, который можно использовать при изучении различных функций API. Обратите внимание, что для всех приведенных ниже примеров мы собираемся удостовериться, что все это происходит в посте Hello World!. Этот пост имеет идентификатор 1. Если вы хотите использовать другую страницу, просто замените 1 на идентификатор сообщения, о котором идет речь.

Когда все готово, давайте начнем смотреть на то, что доступно.

Добавление комментария Мета

Чтобы начать добавлять метаданные в наши комментарии, важно посмотреть таблицу wp_comments, чтобы увидеть, какие комментарии уже существуют. Если вы работаете со свежей установкой WordPress, вы, скорее всего, увидите одну запись:

A single default WordPress comment

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

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

Как и в других API, рассмотренных в этой серии, добавление метаданных к комментариям происходит в двух формах: уникальном и неуникальном. Мы рассмотрим оба варианта.

Добавление уникальных метаданных

Функция add_comment_meta принимает три параметра и необязательный четвертый параметр. Если вы передаете true как четвертый параметр, метаданные будут добавляться только в том случае, если указанный мета-ключ не существует.

Поняно? Давайте взглянем. Сначала мы настроим функцию, которая добавит некоторые метаданные, связанные с первым комментарием (но будет делать это только для сообщения, имеющего идентификатор 1):

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

Добавление неуникальных метаданных

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

А затем обновите страницу, скажем, три раза. Если все идет как положено, вы можете увидеть три новые записи, каждая из которых содержит случайное число, генерируемое вызовом rand() в аргументе meta value.

Multiple values with the same meta key

Достаточно легко двигаемся, да? Если вам нужно одно значение, связанное с одним ключом, то передайте true как необязательный четвертый аргумент; В противном случае не указывайте ничего.

Обновление комментариев

Если вы хотите обновить существующие метаданные комментариев, важно знать идентификатор комментария, мета-ключ и метазначение. Это означает, что WordPress будет смотреть на указанный мета-ключ и связывать его с указанным значением meta.

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

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

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

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

An updated random value related to multiple keys

И укажите это как предыдущее значение в следующем коде:

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

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

Получение метаданных комментария

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

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

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

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

Получение массива

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

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

Получение единственного значения

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

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

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

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

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

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

Удаление метаданных комментария

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

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

Удаление уникальных значений

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

Чтобы удалить уникальное значение, мы просто передаем идентификатор комментария и мета-ключ:

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

Metadata in the comment metadata table

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

A unique value having been removed

Мы поговорим немного подробнее о мерах предосторожности при удалении данных в следующем разделе.

Удаление неуникальных значений

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

То есть, если вы просто передадите ID комментария и мета-ключ функции delete_comment_meta, он удалит все части метаданных комментария. Напишите и выполните следующий код:

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

No random values in the comment metadata table

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

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

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

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

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

Для борьбы с этим я рекомендую один из двух следующих сценариев:

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

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

Заключение 

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

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

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

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

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

Не стесняйтесь следовать за мной в 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.