Создание уникальных Title и Description для интернет-магазина на Woocommerce

Оглавление

Создание уникального Title для категории товаров Woocommerce

На сайте установлен плагин Woocommerce и Yoast SEO. Требуется создать Title по предложенному шаблону:

«Купить (название данного раздела с мал. буквы) от (min цена товара) руб. в Москве с доставкой»

Приведённые в статье фрагменты кода нужно разместить в файле functions.php вашей темы.

add_filter('wpseo_title', 'custom_woocommerce_category_title');
function custom_woocommerce_category_title($title) {
    if (is_product_category()) {
        global $wp_query;

        $category = $wp_query->get_queried_object();
        $category_name = mb_strtolower($category->name);

        // Получаем минимальную цену товара в данной категории
        $args = array(
            'post_type' => 'product',
            'posts_per_page' => 1,
            'post_status' => 'publish',
            'tax_query' => array(
                array(
                    'taxonomy' => 'product_cat',
                    'field'    => 'term_id',
                    'terms'    => $category->term_id,
                ),
            ),
            'meta_key' => '_price',
            'orderby' => 'meta_value_num',
            'order' => 'ASC',
        );
        $loop = new WP_Query($args);
        if ($loop->have_posts()) {
            while ($loop->have_posts()) : $loop->the_post();
                $product = wc_get_product(get_the_ID());
                $min_price = $product->get_price();
            endwhile;
            wp_reset_postdata();
        } else {
            $min_price = 'нет в наличии';
        }

        $title = "Купить {$category_name} от {$min_price} руб. в Казани и Татарстане с доставкой";
    }
    return $title;
}

Создание уникального Description для категории товаров Woocommerce

Исходный шаблон для Description категории товаров:

Купить (название данного раздела с мал.буквы) в Москве с доставкой в мебельном ТЦ. Цены на (название данного раздела с мал. буквы) от (min цена в разделе) руб., высокое качество и гарантия от производителя!

add_filter('wpseo_metadesc', 'custom_woocommerce_category_description');
function custom_woocommerce_category_description($description) {
    if (is_product_category()) {
        global $wp_query;

        $category = $wp_query->get_queried_object();
        $category_name = mb_strtolower($category->name);

        // Получаем минимальную цену товара в данной категории
        $args = array(
            'post_type' => 'product',
            'posts_per_page' => 1,
            'post_status' => 'publish',
            'tax_query' => array(
                array(
                    'taxonomy' => 'product_cat',
                    'field'    => 'term_id',
                    'terms'    => $category->term_id,
                ),
            ),
            'meta_key' => '_price',
            'orderby' => 'meta_value_num',
            'order' => 'ASC',
        );
        $loop = new WP_Query($args);
        if ($loop->have_posts()) {
            while ($loop->have_posts()) : $loop->the_post();
                $product = wc_get_product(get_the_ID());
                $min_price = $product->get_price();
            endwhile;
            wp_reset_postdata();
        } else {
            $min_price = 'нет в наличии';
        }

        $description = "Купить {$category_name} в Москве с доставкой в мебельном ТЦ. Цены на {$category_name} от {$min_price}) руб., высокое качество и гарантия от производителя!";
    }
    return $description;
}

Кроме тега Description, на страниwе есть ещё разметка Open Graph. Для её изменения делаем так же.

function custom_woocommerce_category_og_description($og_description) {
    if (is_product_category()) {
        global $wp_query;

        $category = $wp_query->get_queried_object();
        $category_name = mb_strtolower($category->name);

        // Получаем минимальную цену товара в данной категории
        $args = array(
            'post_type' => 'product',
            'posts_per_page' => 1,
            'post_status' => 'publish',
            'tax_query' => array(
                array(
                    'taxonomy' => 'product_cat',
                    'field'    => 'term_id',
                    'terms'    => $category->term_id,
                ),
            ),
            'meta_key' => '_price',
            'orderby' => 'meta_value_num',
            'order' => 'ASC',
        );
        $loop = new WP_Query($args);
        if ($loop->have_posts()) {
            while ($loop->have_posts()) : $loop->the_post();
                $product = wc_get_product(get_the_ID());
                $min_price = $product->get_price();
            endwhile;
            wp_reset_postdata();
        } else {
            $min_price = 'нет в наличии';
        }

        $og_description = "Купить {$category_name} в Москве с доставкой в мебельном ТЦ. Цены на {$category_name} от {$min_price}) руб., высокое качество и гарантия от производителя!";
    }
    return $og_description;
}

Создание уникального Title для страницы товара Woocommerce

Шаблон title для товаров:

(Название данного товара) – купить по цене (цена товара) руб. в Москве с доставкой

add_filter('wpseo_title', 'custom_woocommerce_product_title', 15);
function custom_woocommerce_product_title($title) {
    if (is_product()) {
        global $post;
        
        // Убедитесь, что объект поста доступен
        if ($post) {
            $product = wc_get_product($post->ID);
            $product_name = $product->get_name();
            $product_price = $product->get_price();

            $title = "{$product_name} – купить по цене {$product_price} руб. в Москве с доставкой";
        }
    }
    return $title;
}

Создание уникального Description для страницы товара Woocommerce

Шаблон для Description страницы товаров содержит значение атрибутов: длина, ширина, высота.

(Название товара) (размеры товара ШхГхД) — купить по цене (цена товара) руб. Стоимость на (название данного раздела с мал. буквы) от (min цена в разделе) руб. в мебельном ТЦ. Высокое качество и гарантия от производителя.

add_filter('wpseo_metadesc', 'custom_woocommerce_product_description', 10, 1);
function custom_woocommerce_product_description($description) {
    if (is_product()) {
        global $post;

        if ($post) {
            $product = wc_get_product($post->ID);
            $product_name = $product->get_name();
            $product_price = $product->get_price();

            // Получаем атрибуты товара
            $height = $product->get_attribute('pa_vysota');
            $length = $product->get_attribute('pa_dlina');
            $width = $product->get_attribute('pa_shirina');

            // Формируем строку размеров
            $dimensions = array_filter([$width, $height, $length]);
            $dimensions_string = implode('x', $dimensions);

            // Получаем категорию товара
            $categories = get_the_terms($post->ID, 'product_cat');
            if ($categories && !is_wp_error($categories)) {
                $category = $categories[0];
                $category_name = mb_strtolower($category->name);

                // Получаем минимальную цену товара в данной категории
                $args = array(
                    'post_type' => 'product',
                    'posts_per_page' => 1,
                    'post_status' => 'publish',
                    'tax_query' => array(
                        array(
                            'taxonomy' => 'product_cat',
                            'field'    => 'term_id',
                            'terms'    => $category->term_id,
                        ),
                    ),
                    'meta_key' => '_price',
                    'orderby' => 'meta_value_num',
                    'order' => 'ASC',
                );
                $loop = new WP_Query($args);
                if ($loop->have_posts()) {
                    while ($loop->have_posts()) : $loop->the_post();
                        $cat_product = wc_get_product(get_the_ID());
                        $min_price = $cat_product->get_price();
                    endwhile;
                    wp_reset_postdata();
                } else {
                    $min_price = 'нет в наличии';
                }
            } else {
                $category_name = '';
                $min_price = 'нет в наличии';
            }

            $description = "{$product_name} ({$dimensions_string}) - купить по цене {$product_price} руб. Стоимость на {$category_name} от {$min_price} руб. в мебельном ТЦ. Высокое качество и гарантия от производителя.";
        }
    }
    return $description;
}