Задача. Необходимо, используя плагин 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 41 42 |
# Product price function wpcrft_get_product_price() { $product_id = get_the_ID(); $product = wc_get_product( $product_id ); if ($product->is_type( 'variable' )){ $return = wc_price($product->get_price()); } else { $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 для добавления зарегистрированных пользовательских пременных.