Статьи

Многоразовые пользовательские мета-боксы. Часть 4. Использование данных

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


WordPress предоставляет несколько способов получения метаданных.

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

the_meta

Наиболее распространенный способ получения данных, сохраненных в мета-поле 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 ‘&ltli>’.$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. Для чего вы будете его использовать?