Плагин YARPP (Yet Another Related Posts Plugin) — отличный инструмент для создания блока связанных записей в WordPress. Обычно он подбирает связанные записи на основе категорий, тегов и текста, но что если нужно настроить подбор именно по мета-данным, которые вы используете для дополнительной информации о записи? В этой статье мы подробно разберём, как автоматизировать создание связанных записей, используя именно мета-данные, а также как расширить функционал YARPP с помощью собственных фильтров и кода.
Почему важно использовать мета-данные для связанных записей
Мета-данные в WordPress — это дополнительные поля, которые хранят информацию о записи, например, цену товара, авторство, уровень сложности статьи и многое другое. Если ваша тематика требует точного подбора контента по таким параметрам, стандартный подбор YARPP может не подойти или быть недостаточно точным.
Автоматизация таких связей позволяет улучшить юзабилити сайта, увеличить время пребывания пользователей и повысить конверсию, особенно если речь идёт о интернет-магазинах, обучающих порталах или новостных сайтах.
Для примера: если у вас есть мета-поле difficulty_level для обучающих материалов, можно сделать так, чтобы рядом отображались только записи с таким же уровнем сложности.
Как настроить YARPP для работы с мета-данными: основные шаги
По умолчанию YARPP не учитывает мета-поля при подборе записей. Для реализации этой логики нужно использовать фильтры YARPP и написать кастомный PHP-код, который расширит запрос.
Основные шаги:
- Определить мета-ключи, по которым будет идти подбор связанных записей.
- Подписаться на фильтр
yarpp_related_where, чтобы добавить условие для SQL-запроса. - Обеспечить передачу значения мета-данных текущей записи в функцию.
- Оптимизировать запрос, чтобы не замедлять сайт.
Пример функции для добавления условия по мета-данным
Допустим, у нас есть мета-ключ difficulty_level. Мы хотим, чтобы YARPP показывал записи с таким же уровнем сложности. Добавим следующий код в файл functions.php вашей темы или в отдельный плагин:
function yarpp_add_meta_where_condition($where, $args) {
global $wpdb;
// Получаем ID текущей записи
$post_id = get_the_ID();
if (!$post_id) {
return $where;
}
// Получаем значение мета-поля difficulty_level
$difficulty = get_post_meta($post_id, 'difficulty_level', true);
if (empty($difficulty)) {
return $where;
}
// Добавляем условие к WHERE для фильтрации по мета-данным
$where .= $wpdb->prepare(
" AND EXISTS (SELECT 1 FROM {$wpdb->postmeta} pm WHERE pm.post_id = p.ID AND pm.meta_key = %s AND pm.meta_value = %s)",
'difficulty_level', $difficulty
);
return $where;
}
add_filter('yarpp_related_where', 'yarpp_add_meta_where_condition', 10, 2);В этом коде мы расширяем запрос YARPP, добавляя подзапрос, который проверяет совпадение мета-поля difficulty_level у связанной записи с текущей.
Как передать значение мета-поля в шаблон YARPP для отладки
Чтобы убедиться, что условие работает правильно, полезно вывести значение мета-данных текущей записи в шаблоне связанных записей. Для этого можно добавить в functions.php такую функцию:
function yarpp_show_meta_value() {
$post_id = get_the_ID();
$difficulty = get_post_meta($post_id, 'difficulty_level', true);
echo '<p>Уровень сложности текущей записи: ' . esc_html($difficulty) . '</p>';
}
add_action('yarpp_related', 'yarpp_show_meta_value');После этого в блоке связанных записей появится информация об уровне сложности текущей записи.
Оптимизация и кеширование для работы с мета-данными
Расширение запроса YARPP дополнительными условиями по мета-данным может негативно сказаться на производительности, особенно на больших сайтах. Чтобы минимизировать нагрузку, рекомендуется:
- Использовать объектный кеш (например, встроенный в WordPress или Redis).
- Настроить кэширование результатов YARPP — в плагине есть встроенные опции для этого.
- Рассмотреть возможность создания отдельного индекса в базе данных по полю
meta_keyиmeta_valueдля ускорения запросов.
Альтернативные плагины и инструменты для работы с мета-данными
Если YARPP не подходит по каким-то причинам, можно рассмотреть другие плагины, которые поддерживают более гибкий выбор связанных записей по мета-данным:
- Contextual Related Posts — удобный плагин с поддержкой кастомных подбора, но требует доработок для мета-данных.
- Related Posts for WordPress — имеет расширенные настройки, можно доработать под мета-данные.
- Использование кастомных WP_Query с параметрами
meta_query— самый гибкий способ, но требует самостоятельной реализации блока связанных записей.
При необходимости автоматизации можно написать свой плагин с использованием WP_Query и AJAX, чтобы динамически подгружать связанные записи по мета-данным без нагрузки на страницу.
Пример кастомного WP_Query для связанных записей по мета-данным
Для тех, кто хочет полностью контролировать выборку, ниже пример функции, которая возвращает связанные записи с тем же значением мета-поля difficulty_level:
function yarpp_get_related_by_meta($post_id) {
$difficulty = get_post_meta($post_id, 'difficulty_level', true);
if (empty($difficulty)) {
return [];
}
$args = [
'post_type' => get_post_type($post_id),
'posts_per_page' => 5,
'post__not_in' => [$post_id],
'meta_query' => [
[
'key' => 'difficulty_level',
'value' => $difficulty,
'compare' => '=',
]
]
];
$query = new WP_Query($args);
return $query->posts;
}
// Использование
$related_posts = yarpp_get_related_by_meta(get_the_ID());
if (!empty($related_posts)) {
echo '<ul>';
foreach ($related_posts as $post) {
echo '<li><a href="' . get_permalink($post->ID) . '">' . esc_html(get_the_title($post->ID)) . '</a></li>';
}
echo '</ul>';
} else {
echo 'Связанных записей не найдено.';
}Интеграция с плагинами из WPShop.ru
Для расширения функционала можно использовать плагин Clearfy Pro, который позволяет оптимизировать код и кеширование, что особенно полезно при тяжелых запросах YARPP с мета-фильтрами.
Если вы используете темы Reboot или JournalX с сайта WPShop.ru, они уже хорошо оптимизированы под кастомные запросы и кеширование, что улучшит скорость загрузки связанных записей.
Итоги
Автоматическое создание связанных записей на основе мета-данных — мощный инструмент, который позволяет сделать подбор контента очень точным и полезным для пользователей. Используя фильтры YARPP и собственный PHP-код, вы сможете значительно расширить возможности плагина без необходимости создавать всё с нуля.
Обязательно тестируйте производительность и используйте кеширование, чтобы не влиять на скорость сайта. Комбинируйте YARPP с оптимизирующими плагинами и темами из WPShop.ru для наилучшего результата.