Метаданные — это дополнительные данные, которые можно привязать к записям, страницам или другим типам записей WordPress. Они позволяют хранить и отображать уникальную информацию, которая отсутствует в стандартных полях записи. Например, вы можете добавить цену, рейтинг, дату события или любую другую информацию. В этой статье мы подробно рассмотрим, как добавить собственные метаданные к записям WordPress, используя как плагины, так и собственный код.
Что такое собственные метаданные в WordPress и зачем они нужны
По умолчанию WordPress позволяет добавлять метаданные к записям через стандартные «Пользовательские поля». Однако интерфейс устарел и не всегда удобен для конечных пользователей. Собственные метаданные дают возможность расширить функционал сайта, добавляя уникальные свойства к записям. Например, если вы ведёте блог о книгах, вы можете добавить поле «Автор», «Жанр» и «Год издания».
Использование собственных метаданных полезно для:
- Создания более структурированной информации;
- Фильтрации и сортировки записей по дополнительным параметрам;
- Отображения уникальных данных в шаблонах;
- Интеграции с плагинами и внешними сервисами.
Важно понимать, что метаданные хранятся в таблице wp_postmeta, связанной с ID записи, что обеспечивает эффективное хранение и поиск.
Использование плагинов для добавления и управления метаданными
Если вы не хотите писать код, можно воспользоваться плагинами, которые упрощают создание и отображение метаданных. Рассмотрим два популярных решения:
1. Advanced Custom Fields (ACF)
Плагин ACF — один из самых популярных инструментов для добавления собственных полей. Он даёт удобный интерфейс для создания различных типов полей (текст, число, дата, изображение, выбор из списка и др.) и управления их выводом.
Основные преимущества ACF:
- Простой визуальный редактор полей;
- Гибкие условия отображения полей;
- Поддержка повторяемых и групповых полей;
- Разнообразие типов полей;
- Интеграция с темами и шаблонами через функции.
Пример создания поля «Цена» с помощью ACF:
- Установите и активируйте плагин Advanced Custom Fields.
- Перейдите в меню «Пользовательские поля» → «Добавить новую». Назовите группу, например, «Дополнительные данные товара».
- Добавьте поле с типом «Число» и названием «Цена».
- Установите, чтобы поле отображалось для записей определённого типа, например, «Товар».
Для вывода значения в шаблоне используйте функцию:
echo get_field('цена');2. Meta Box
Meta Box — ещё один мощный плагин для работы с метаданными. Он более ориентирован на разработчиков и предлагает множество расширений.
Преимущества:
- Широкие возможности кастомизации;
- Поддержка сложных полей и повторяемых групп;
- Возможность создания метабоксов с помощью кода;
- Лёгкое отображение и сохранение данных.
Meta Box хорош тем, что вы можете быстро создавать метабоксы прямо из кода, что рассмотрим далее.
Как добавить собственные метаданные к записям WordPress с помощью кода
Если вы хотите полный контроль и не зависеть от плагинов, можно добавить метаданные с помощью собственного кода. Рассмотрим пошаговое создание метабокса и сохранение данных.
1. Регистрируем метабокс для записи
Добавим метабокс с полем «wpsell_price» для хранения цены товара.
function wpsell_add_custom_meta_box() {
add_meta_box(
'wpsell_price_meta_box',
'Цена товара',
'wpsell_price_meta_box_callback',
'post',
'side',
'default'
);
}
add_action('add_meta_boxes', 'wpsell_add_custom_meta_box');
function wpsell_price_meta_box_callback($post) {
wp_nonce_field('wpsell_save_price_data', 'wpsell_price_meta_box_nonce');
$value = get_post_meta($post->ID, '_wpsell_price', true);
echo '<label for="wpsell_price_field">Введите цену:</label>';
echo '<input type="number" id="wpsell_price_field" name="wpsell_price_field" value="' . esc_attr($value) . '" step="0.01" />';
}
2. Сохраняем данные метаданных
function wpsell_save_price_meta_box_data($post_id) {
if (!isset($_POST['wpsell_price_meta_box_nonce'])) return;
if (!wp_verify_nonce($_POST['wpsell_price_meta_box_nonce'], 'wpsell_save_price_data')) return;
if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return;
if (!current_user_can('edit_post', $post_id)) return;
if (isset($_POST['wpsell_price_field'])) {
$price = sanitize_text_field($_POST['wpsell_price_field']);
update_post_meta($post_id, '_wpsell_price', $price);
}
}
add_action('save_post', 'wpsell_save_price_meta_box_data');
3. Вывод метаданных в шаблоне
Чтобы вывести цену в шаблоне single.php или другом, используйте:
$price = get_post_meta(get_the_ID(), '_wpsell_price', true);
echo 'Цена: ' . esc_html($price) . ' руб.';
Как использовать собственные метаданные для фильтрации и сортировки записей
Метаданные полезны не только для хранения, но и для выборки записей по дополнительным критериям. Например, можно вывести все товары с ценой меньше 1000 рублей.
Для этого используется класс WP_Query с аргументом meta_query:
$args = [
'post_type' => 'post',
'meta_query' => [
[
'key' => '_wpsell_price',
'value' => 1000,
'compare' => '<',
'type' => 'NUMERIC'
]
]
];
$query = new WP_Query($args);
if ($query->have_posts()) {
while ($query->have_posts()) {
$query->the_post();
echo '<h2>' . get_the_title() . '</h2>';
echo '<p>Цена: ' . get_post_meta(get_the_ID(), '_wpsell_price', true) . '</p>';
}
wp_reset_postdata();
} else {
echo 'Товары не найдены';
}
Также можно сортировать записи по метаданным, например, по цене:
$args = [
'post_type' => 'post',
'meta_key' => '_wpsell_price',
'orderby' => 'meta_value_num',
'order' => 'ASC'
];
$query = new WP_Query($args);
// Вывод аналогичен предыдущему примеру
Советы и лучшие практики при работе с метаданными в WordPress
Работа с метаданными требует аккуратности, чтобы не создавать конфликтов и не замедлять сайт.
- Используйте уникальные префиксы для ключей метаданных, например,
_wpsell_price, чтобы избежать коллизий. - Сохраняйте данные через защиту nonce и проверку прав пользователя, чтобы избежать уязвимостей.
- Оптимизируйте запросы с метаданными, избегайте сложных и частых тяжелых запросов с большим количеством
meta_query. - Используйте кэширование для ускорения вывода данных из метаданных.
- При необходимости используйте специализированные плагины, чтобы не писать лишний код и не тратить время.
Таким образом, добавление собственных метаданных расширяет возможности WordPress и позволяет сделать сайт более функциональным и удобным для пользователей и администраторов.