Зачем нужны динамические метаданные в WordPress
Метаданные — это важная часть структуры WordPress, которая хранится в таблицах базы данных и отвечает за дополнительную информацию о постах, пользователях или таксономиях. Часто возникает задача задавать метаданные условно, чтобы, например, изменить SEO-заголовок, описание или произвольные поля в зависимости от параметров записи, категории или пользовательских условий. Это особенно полезно для автоматизации и повышения релевантности контента.
Стандартным способом добавления метаданных является использование функций add_post_meta или update_post_meta. Однако для динамического изменения метаданных в рантайме без постоянного хранения в базе потребуется использовать фильтры WordPress.
Такой подход позволяет не засорять базу, экономить место и гибко менять данные под разные условия, например, дату публикации, авторство, категорию или теги.
Использование фильтра wpteam_get_post_metadata для динамического добавления метаданных
В WordPress существует фильтр get_post_metadata, который позволяет перехватывать запросы к метаданным. Мы назовём нашу функцию с префиксом домена сайта — wpteam_dynamic_post_meta.
Пример кода для динамического добавления метаданных:
function wpteam_dynamic_post_meta( $null, $object_id, $meta_key, $single ) {
// Проверяем нужный ключ метаданных
if ( 'dynamic_seo_title' === $meta_key ) {
$post = get_post( $object_id );
if ( ! $post ) {
return $null; // Пост не найден
}
// Пример условия: если пост в категории 'news', меняем SEO-заголовок
if ( has_category( 'news', $post ) ) {
$dynamic_title = 'Новости WPTeam: ' . $post->post_title;
return $single ? $dynamic_title : array( $dynamic_title );
}
}
return $null; // Возвращаем null, чтобы WP продолжил искать в базе
}
add_filter( 'get_post_metadata', 'wpteam_dynamic_post_meta', 10, 4 );В этом примере, если запрашивается метаданные с ключом dynamic_seo_title, и пост принадлежит категории news, возвращается динамический заголовок. Иначе — возвращаем null, чтобы WordPress искал обычные метаданные в базе.
Добавление нескольких условий и кастомизация метаданных
Мы можем расширить логику, чтобы работать с разными метаданными и условиями. Например, добавить динамическое описание или ключевые слова для SEO, основанные на авторе или дате публикации.
function wpteam_dynamic_post_meta_extended( $null, $object_id, $meta_key, $single ) {
$post = get_post( $object_id );
if ( ! $post ) {
return $null;
}
switch ( $meta_key ) {
case 'dynamic_seo_description':
// Если пост старше года — добавляем метку 'Архив'
$post_date = strtotime( $post->post_date );
if ( $post_date < strtotime( '-1 year' ) ) {
$desc = 'Архивная запись: ' . wp_trim_words( $post->post_content, 20, '...' );
} else {
$desc = wp_trim_words( $post->post_excerpt ? $post->post_excerpt : $post->post_content, 30, '...' );
}
return $single ? $desc : array( $desc );
case 'dynamic_seo_keywords':
// Ключевые слова из названия и тегов
$tags = get_the_tags( $object_id );
$keywords = array( $post->post_title );
if ( $tags && ! is_wp_error( $tags ) ) {
foreach ( $tags as $tag ) {
$keywords[] = $tag->name;
}
}
return $single ? implode( ', ', $keywords ) : $keywords;
default:
return $null;
}
}
add_filter( 'get_post_metadata', 'wpteam_dynamic_post_meta_extended', 10, 4 );Такой подход помогает централизовать логику динамических метаданных и легко расширять её под новые требования.
Применение в SEO и кастомных шаблонах
Динамические метаданные удобно использовать в темах, например, в файле header.php или в SEO-плагинах, чтобы подставлять актуальные теги:
<title><?php echo esc_html( get_post_meta( get_the_ID(), 'dynamic_seo_title', true ) ?: get_the_title() ); ?></title>
<meta name="description" content="<?php echo esc_attr( get_post_meta( get_the_ID(), 'dynamic_seo_description', true ) ?: get_the_excerpt() ); ?>">
<meta name="keywords" content="<?php echo esc_attr( get_post_meta( get_the_ID(), 'dynamic_seo_keywords', true ) ); ?>">Если у вас установлены плагины SEO, например, Clearfy Pro или Expert Review, вы можете интегрировать динамические метаданные в их функционал через хуки, расширяя возможности SEO-оптимизации.
Использование плагинов для управления динамическими метаданными
Если хочется облегчить работу с метаданными, можно использовать плагины типа Advanced Custom Fields (ACF) или Meta Box, но для динамических значений, которые не хранятся в базе, стоит писать кастомные фильтры, как показано выше.
Плагин Clearfy Pro содержит опции для оптимизации метаданных, но не заменит логику динамического формирования под условия. Здесь именно код даст максимум гибкости.
Выводы и рекомендации
Динамические метаданные позволяют гибко управлять дополнительной информацией о постах, не создавая излишней нагрузки на базу данных. Использование фильтра get_post_metadata — оптимальное решение для таких задач.
Важно тестировать все условия и сценарии, чтобы не допустить конфликтов с существующими метаданными и плагинами. Для отладки удобно использовать вывод значений с помощью error_log или плагинов для дебага.
Если нужно более сложное управление метаданными — комбинируйте код с возможностями популярных плагинов, например, интегрируйте динамические значения в шаблоны, создавайте собственные REST API или шорткоды для вывода.
Подробнее о плагинах для удобной работы с метаданными — на Clearfy Pro и Expert Review.