Задача. Необходимо, используя плагин SEO By Yoast, в интернет-магазине на Woocommerce настроить шаблоны Title и Description для товаров и категорий по маске, где нужно выводить цену текущего товара для страниц товаров и минимальную цену товара в категории.
«[Название товара] купить по цене [цена товара] руб ☛ Доставка по Галактике ★ Магазин [Название магазина]»
Пример Description для категорий:
«[Название категории] купить по цене [минимальная цена товара] руб ☛ Низкие цены ☛ Большой выбор ☛ Доставка по всей Галактике ★ Магазин [Название магазина] ☎ +0 (0000) 00-00-00 (Пн-Вс с 9:00 до 19:00)»
Решение. У SEO By Yoast нет в шаблонах Title и Description переменной (теги) для цены товара или минимальной цены категории. Цена товара есть только в платном дополнении. Но есть возможность зарегистрировать пользовательские переменные для этого плагина, создать свои функции получения цены и привязать их к нашим зарегистрированным переменным. Для регистрации кастомных переменных в SEO By Yoast добавить Код №1 в functions.php
(возможно, лучше сделать отдельным плагином). Результат на Изображениях №1.1 и №1.2.
Пример шаблона Title кастомной переменной цены товара в SEO by Yoast [Изображение №1]
1
2
3
4
5
6
7
8
9
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
39
40
|
# Product price
function wpcrft_get_product_price() {
$product_id = get_the_ID();
$product = wc_get_product( $product_id );
$return = $product–>get_regular_price();
return $return;
}
# Min Product Price of Category
function wpcrft_get_extremes_price_in_product_cat() {
$queried_object = get_queried_object();
$term_id = $queried_object–>term_id;
global $wpdb;
$sql = “
SELECT MIN( meta_value+0 ) as minprice
FROM {$wpdb->posts}
INNER JOIN {$wpdb->term_relationships} ON ({$wpdb->posts}.ID = {$wpdb->term_relationships}.object_id)
INNER JOIN {$wpdb->postmeta} ON ({$wpdb->posts}.ID = {$wpdb->postmeta}.post_id)
WHERE
( {$wpdb->term_relationships}.term_taxonomy_id IN (%d) )
AND {$wpdb->posts}.post_type = ‘product’
AND {$wpdb->posts}.post_status = ‘publish’
AND {$wpdb->postmeta}.meta_key = ‘_price’
“;
return $wpdb–>get_var( $wpdb–>prepare( $sql, $term_id ) );
}
# Register custom Yoast variables
function wpcrft_register_custom_yoast_variables() {
wpseo_register_var_replacement(‘%%wpcrft_wc_product_price%%’, ‘wpcrft_get_product_price’, ‘advanced’, ‘Product price Woocommerce’);
wpseo_register_var_replacement(‘%%wpcrft_wc_min_cat_price%%’, ‘wpcrft_get_extremes_price_in_product_cat’, ‘advanced’, ‘Min Product price of Category Woocommerce’);
}
add_action(‘wpseo_register_extra_replacements’, ‘wpcrft_register_custom_yoast_variables’);
|
wpseo_register_var_replacement
— функция SEO by Yoast для регистрации кастомной переменной;%%wpcrft_wc_product_price%%
— переменная цена товара, которую нужно потом использовать в шаблонах;%%wpcrft_wc_min_cat_price%%
— переменная минимальная цена в категории;wpcrft_get_product_price
иwpcrft_get_extremes_price_in_product_cat
— функции, которые выводят цену товара и минимальную цену в катеории соответственно;'Product price Woocommerce'
— описание переменной для пояснения;'wpseo_register_extra_replacements'
— хук SEO by Yoast для добавления зарегистрированных пользовательских пременных.