Статьи

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

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

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

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

Простейшим примером массива является список значений, разделенных запятыми, внутри функции array() , например:

1
$heros = array( ‘Luke’, ‘Leia’, ‘Han’);

PHP автоматически индексирует массивы, созданные в разделенных запятыми списках, присваивая каждому элементу числовой индекс, начиная с нуля . Это означает, что мы можем получить значение второго элемента ‘Leia’ из массива $heroes , указав индекс 1.

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

1
2
$heroes = array( ‘Luke’, ‘Leia’, ‘Han’);
echo $heroes[ 1 ];

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

Мы можем получить URL, ширину и высоту изображения, используя числовые индексы из массива, который возвращает эта функция (обратите внимание, что ‘7’, передаваемый в функцию, относится к идентификатору вложения, и в этом случае он произвольный для целей наш пример):

1
2
$img = wp_get_attachment_image_src( 7 );
echo ‘<img src=»‘ . $img[0] . >» width=»‘ . $img[1] . ‘» height=»‘ . $img[2] . ‘» />’;

Конечно, отслеживание номеров индексов в массивах может привести к путанице, поэтому PHP позволяет нам создавать ассоциативные массивы. Возвращаясь к нашему примеру $heroes , мы могли бы дать каждому элементу в нашем массиве имя:

1
2
3
4
5
$heroes = array(
    ‘unlikely_hero’ => ‘Luke’,
    ‘badass_princess’ => ‘Leia’,
    ‘lovable_rouge’ => ‘Han’,
);

Мы называем эти имена ключами . В этом массиве мы бы сказали, что ключ ‘ablely_hero’ имеет значение ‘Luke’. Мы можем получить значение этого ключа, поместив его в скобки рядом с переменной. Например:

1
echo $hereos[‘unlikely_hero’];

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

Например:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
$heroes => array(
        ‘Luke’ => array(
            ‘full_name’ => ‘Luke Skywalker’,
            ‘home_planet’ => ‘Tatooine’,
            ‘trope’ => ‘Unlikely Hero’,
        ),
        ‘Leia’ => array(
            ‘full_name’ => ‘Leia Organa’,
            ‘home_planet’ => ‘Alderaan’,
            ‘trope’ => ‘Badass Princess’,
        ),
        ‘Han’ => array (
            ‘full_name’ => ‘Han Solo’,
            ‘home_planet’ => ‘Corell’,
            ‘trope’ => ‘Lovable Rouge’,
        ),
);

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

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

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

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

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

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

Просто нажмите «Run» и увидите результаты в нижней части экрана. Самое приятное то, что любые сгенерированные вами ошибки будут отображаться в окне результатов, а не на вашем сайте. Неустранимые ошибки ломают консоль отладки, а не ваш сайт.

Кстати, я только поцарапал поверхность того, что может делать Debug Bar. Кроме того, Debug Bar и Debug Console, а также множество других полезных утилит включены в плагин для разработчиков , который я очень рекомендую. Когда вы научитесь работать с метаданными, вы также найдете плагин Debug Bar Post Meta также весьма полезным.

Теперь, когда у вас есть место для тестирования, как исследовать внутренности массива. Для этой работы PHP предоставляет нам две служебные функции, которые мы никогда бы не использовали для создания var_dump() , но они идеально подходят для диагностической работы — var_dump() и print_r() .

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

вар-свалка

Вот скриншот var_dump метаданных для поста. Это показывает, как я пробурил только одно поле. Моя цель состояла в том, чтобы получить значение поля мета-заголовка, созданного плагином WordPress SEO от Yoast.

Как вы можете видеть из var_dump, что я сгенерировал из всех метаполей для идентификатора записи # 1 с помощью get_post_meta( 1 ); Я работал с ассоциативным многомерным массивом, который содержал индексированный массив только с одним индексом. Изучив var_dump, я обнаружил, что ключ, который мне нужен, был ‘_yoast_wpseo_title’ и что фактическая информация, которая мне нужна, была в первом индексе. Чтобы получить доступ к этому, я поместил ключ ‘_yoast_wpseo_title’ в его собственную переменную, а затем повторил первый индекс следующим образом:

1
2
3
$meta = get_post_meta(1);
$seo_title = $meta[‘_yoast_wpseo_title’];
echo ‘<div>SEO TITLE: ‘ .

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

Важно помнить, что get_post_meta(1, '_yoast_wpseo_title' ); не вернет нужное нам значение, а вернет массив. Добавляя true для третьего аргумента ‘single’, мы можем получить только первый индекс, который нам нужен.

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

1
get_post_meta( 1, ‘_yoast_wpseo_title’, true );

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

Пользователи также могут иметь настраиваемые поля. Пользовательские метаданные, дополнительные поля, добавленные в профили пользователей, работают так же, как и метаданные публикации, но хранятся в таблице wp_usermeta . При работе с метаданными пользователя вместо get_post_meta() мы используем get_user_meta() .

Эти две функции работают одинаково, они просто получают свои данные из двух разных таблиц в базе данных.

Вот пример использования get_user_meta() для вывода собственного изображения в виде ссылки на посты автора:

1
2
3
4
5
6
$users = array ( 55, 89, 144, 233, 377 );
foreach ( $users as $user ) {
    $link = get_author_posts_url( $user );
    $img = get_user_meta( $user, ‘link_img’, ;
    echo ‘<a href=»‘ . $link . ‘»><img src=»‘ . $img . ‘» /></a>’;
} //end foreach loop

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

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