В части 1 , части 2 и 3 нашей серии учебных пособий по пользовательскому шаблону мета-блока мы узнали, как создать мета-блок многократного использования, который получает всю информацию о полях из легко читаемого и легко дублируемого массива. Многие данные просты в использовании, просто отображая мета-поле в шаблоне или с помощью функции, но некоторые поля являются более сложными и требуют более тонкого использования для правильного использования. Этот учебник даст вам базовое представление о том, как использовать эти данные, и его можно изложить бесчисленными способами.
Получение данных
WordPress предоставляет несколько способов получения метаданных.
Вывод всех данных одновременно
Самый простой способ отобразить данные с the_meta()
функции the_meta()
. Вы можете добавить это прямо в шаблон single.php , но он не даст вам результатов, к которым вы, вероятно, стремитесь . Это очень буквальный вывод данных в неупорядоченном списке с префиксом ключа каждого поля, как показано на рисунке.
Получить одно поле
Наиболее распространенный способ получения данных, сохраненных в мета-поле post, — это get_post_meta()
функции get_post_meta()
. Это простой способ указать конкретное поле и сохранить его в переменной, которую можно использовать позже.
1
|
$custom_text = get_post_meta($post->ID, ‘custom_text’, true);
|
Использование этого кода в одном пост-цикле помещало бы текст «Некоторый текст в основном текстовом вводе» в переменную $custom_text
которую затем можно было бы $custom_text
или отфильтровать, или все, что вы хотели бы сделать со строкой. Когда вы просто имеете дело с парой полей, возможно, это правильный путь, но в нашем примере мы работаем с 11 различными полями. Вызов их всех по отдельности с помощью этой функции приведет к ненужному увеличению вашего кода, поскольку есть способ получить все данные одновременно.
Получите все данные за один раз
Мой любимый метод при работе с таким количеством полей — использовать get_post_custom()
. С помощью этой функции мы можем сохранить все пользовательские мета-поля записей в одном массиве, а затем получить нужные данные с помощью ключа массива.
$post_meta_data = get_post_custom($post->ID);
даст нам массив, который выглядит следующим образом:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
Array
(
[custom_text] => Array (
[0] => Some text in a basic text input
)
[custom_textarea] => Array (
[0] => A paragraph or two from a textarea.
Mauris vel enim mauris, vitae mattis tortor.
)
[custom_checkbox] => Array (
[0] => on
)
[custom_select] => Array (
[0] => one
)
[custom_radio] => Array (
[0] => two
)
[custom_checkbox_group] => Array (
[0] => a:2:{i:0;s:3:»one»;i:1;s:5:»three»;}
)
[custom_post_id] => Array (
[0] => 109
)
[custom_date] => Array (
[0] => 05/25/2012
)
[custom_slider] => Array (
[0] => 15
)
[custom_image] => Array (
[0] => 413
)
[custom_repeatable] => Array (
[0] => a:3:{i:0;s:22:»text from a repeatable»;i:1;s:27:»more text from a repeatable»;i:2;s:33:»repeatable text fields are great!»;}
)
)
|
Как видно из этого массива, WordPress сохраняет каждое поле в виде массива, поскольку для одного и того же поля можно иметь более одного значения. Вы, вероятно, также заметите, что некоторые поля сериализуются. Давайте углубимся в обработку данных из каждого поля и рассмотрим, как это исправить.
Простые поля ввода
С полями text и textarea довольно просто работать. Вы можете повторить их с одним из следующих примеров:
1
2
3
4
5
6
7
8
9
|
echo $post_meta_data[‘custom_text’][0];
echo apply_filters(‘the_content’, $post_meta_data[‘custom_textarea’][0]);
$custom_checkox = $post_meta_data[‘custom_checkbox’][0];
if ($custom_checkbox == ‘on’) {
do_stuff();
}
|
Первая строка просто выведет строку как есть, а вторая строка преобразует разрывы строк в абзацы с фильтром the_content
WordPress. Вы можете использовать эти же методы для полей выбора, радио, даты и ползунка.
Последняя строка показывает, как вы можете проверить, был ли установлен флажок или нет. Если это так, вы можете выполнять различные функции или любое количество вещей.
Сериализованные данные
Наши поля группы флажков и повторяемые поля хранят массивы, которые сериализуются в базе данных. Прежде чем мы сможем вывести эти данные, мы должны их десериализовать.
1
2
3
|
$custom_checkbox_group = unserialize($post_meta_data[‘custom_checkbox_group’][0]);
$custom_repeatable = unserialize($post_meta_data[‘custom_repeatable’][0]);
|
Функция unserialize()
— это базовая функция PHP, которая преобразует наши данные в массив, который проще в использовании. Код выше даст мне два массива, которые выглядят так:
01
02
03
04
05
06
07
08
09
10
11
|
Array
(
[0] => one
[1] => three
)
Array
(
[0] => text from a repeatable
[1] => more text from a repeatable
[2] => repeatable text fields are great!
)
|
Теперь я могу перебирать массивы, но я хочу использовать их в своем выводе. Важно отметить, что в поле с повторяемостью, если вы также сделаете его сортируемым, как в нашем примере в части 3 нашего учебного пособия по шаблонам пользовательских мета-блоков , ключи в массиве будут автоматически сохраняться в порядке 0, 1, 2, 3. и т. д., а не в том порядке, в котором они были введены до сортировки.
1
2
3
4
5
|
echo ‘<ul class=»custom_repeatable»>’;
foreach ($custom_repeatable as $string) {
echo ‘<li>’.$string.'</li>’;
}
echo ‘</ul>’;
|
В этом примере будет $custom_repeatable
неупорядоченный список каждой строки, сохраненной в массиве $custom_repeatable
.
Специализированные данные
Для наших полей Post List и Image мы сохранили идентификатор. Могут быть очень редкие случаи, когда вы хотите вывести только идентификатор, но, скорее всего, вы захотите использовать идентификатор для получения дополнительной информации.
1
2
3
4
5
|
$custom_post_id = $post_meta_data[‘custom_post_id’][0];
echo ‘<a href=»‘.get_permalink($custom_post_id).'»>’.get_the_title($custom_post_id).'</a>’;
$custom_image = $post_meta_data[‘custom_image’][0];
echo wp_get_attachment_image($custom_image, ‘thumbnail’);
|
Вывод
В этом руководстве показаны основные способы использования данных, которые мы храним, с нашими настраиваемыми метаблоками многократного использования. Возможность сохранять дополнительные данные и использовать их в темах и плагинах открывает целый новый мир возможностей с WordPress. Для чего вы будете его использовать?