Плагин Yet Another Related Posts Plugin (YARPP) отлично подходит для автоматического подбора связанных записей в WordPress. Однако стандартный функционал по умолчанию не учитывает мета-данные, которые часто содержат важную дополнительную информацию о записи, например, цену, авторство или индивидуальные свойства.
Почему важно использовать мета-данные для подбора связанных записей
Выбор связанных записей только на основе категорий и тегов не всегда даёт релевантный результат. Например, если у вас интернет-магазин на WooCommerce, то пользователи будут заинтересованы в товарах, которые имеют схожие характеристики, указанные в мета-полях, таких как «цвет», «размер», «бренд» и т.д.
Использование мета-данных позволяет значительно улучшить качество рекомендаций, увеличивая время, которое пользователь проводит на сайте, и повышая конверсию.
YARPP из коробки не поддерживает фильтрацию по мета-данным, но благодаря хукам и фильтрам WordPress можно расширить его возможности.
Как расширить YARPP для выбора записей с учётом мета-данных
Для добавления фильтрации по мета-данным в YARPP будем использовать фильтр yarpp_related_where. С его помощью можно добавить свои условия в SQL-запрос, который выбирает связанные записи.
Ниже приведён пример функции, которая добавляет условие по мета-ключу product_color и его значению:
function yarpp_add_meta_filter($where, $args) {
global $wpdb;
// Получаем текущий ID записи
$post_id = $args['post_id'];
// Получаем значение мета-поля product_color у текущей записи
$color = get_post_meta($post_id, 'product_color', true);
if ($color) {
// Добавляем JOIN для подключения таблицы мета-данных
$where .= " AND EXISTS (
SELECT 1 FROM {$wpdb->postmeta} pm
WHERE pm.post_id = {$wpdb->posts}.ID
AND pm.meta_key = 'product_color'
AND pm.meta_value = '" . esc_sql($color) . "'
)";
}
return $where;
}
add_filter('yarpp_related_where', 'yarpp_add_meta_filter', 10, 2);
Эта функция добавляет в запрос условие, что связанные записи должны иметь мета-ключ product_color с таким же значением, как у текущей записи. Это позволит подбирать более релевантные записи на основе цвета продукта.
Добавление JOIN для оптимизации выборки
Чтобы запрос работал корректно и эффективно, возможно, потребуется добавить JOIN к таблице мета-данных. Для этого используйте фильтр yarpp_related_join:
function yarpp_add_meta_join($join, $args) {
global $wpdb;
$join .= " INNER JOIN {$wpdb->postmeta} pm ON pm.post_id = {$wpdb->posts}.ID ";
return $join;
}
add_filter('yarpp_related_join', 'yarpp_add_meta_join', 10, 2);
Так YARPP сможет использовать данные из таблицы мета-данных в WHERE условии без ошибок.
Пример комплексного фильтра с несколькими мета-ключами
Допустим, нужно фильтровать записи по двум мета-ключам: product_color и product_brand. Можно расширить функцию следующим образом:
function yarpp_add_multiple_meta_filters($where, $args) {
global $wpdb;
$post_id = $args['post_id'];
$color = get_post_meta($post_id, 'product_color', true);
$brand = get_post_meta($post_id, 'product_brand', true);
if ($color) {
$where .= " AND EXISTS (
SELECT 1 FROM {$wpdb->postmeta} pm_color
WHERE pm_color.post_id = {$wpdb->posts}.ID
AND pm_color.meta_key = 'product_color'
AND pm_color.meta_value = '" . esc_sql($color) . "'
)";
}
if ($brand) {
$where .= " AND EXISTS (
SELECT 1 FROM {$wpdb->postmeta} pm_brand
WHERE pm_brand.post_id = {$wpdb->posts}.ID
AND pm_brand.meta_key = 'product_brand'
AND pm_brand.meta_value = '" . esc_sql($brand) . "'
)";
}
return $where;
}
add_filter('yarpp_related_where', 'yarpp_add_multiple_meta_filters', 10, 2);
В этом варианте запрос будет искать записи, совпадающие и по цвету, и по бренду, что значительно сужает круг связанных записей, делая их более точными.
Использование плагинов для расширения YARPP
Если вы не хотите писать код самостоятельно, существуют плагины, которые расширяют функционал YARPP для работы с мета-данными. Например, Clearfy Pro предлагает много инструментов для оптимизации и кастомизации работы WordPress и плагинов, в том числе и YARPP.
Также полезны плагины для управления мета-полями, такие как Advanced Custom Fields (ACF), которые позволяют удобно создавать и редактировать мета-данные, чтобы потом использовать их в фильтрах YARPP.
Рекомендации по оптимизации производительности
Добавление сложных условий в SQL-запросы может замедлить работу сайта, особенно при большом количестве записей и мета-данных. Чтобы минимизировать нагрузку:
- Используйте индексы по мета-ключам в базе данных.
- Проверяйте, что мета-ключи не содержат слишком много уникальных значений, иначе индекс будет малоэффективен.
- Кэшируйте результаты YARPP с помощью плагинов кэширования.
- При большом каталоге товаров рассмотрите возможность использования внешних сервисов рекомендаций.
Выводы и практические советы
Использование мета-данных для подбора связанных записей в YARPP позволяет значительно повысить качество рекомендаций, делая их более релевантными и полезными для пользователей. Реализация через фильтры yarpp_related_where и yarpp_related_join — гибкий и эффективный способ расширить стандартный функционал плагина.
При внедрении обязательно тестируйте запросы на предмет производительности и корректности результатов. Используйте инструменты профилирования и кэширования для поддержки быстрого отклика сайта.