diff --git a/wp-content/themes/sevastopol-tort-child/assets/css/home-page.css b/wp-content/themes/sevastopol-tort-child/assets/css/home-page.css index f3dae0c..0f1a95b 100644 --- a/wp-content/themes/sevastopol-tort-child/assets/css/home-page.css +++ b/wp-content/themes/sevastopol-tort-child/assets/css/home-page.css @@ -4,6 +4,7 @@ .home-hero__inner, .home-categories__inner, +.home-commerce__inner, .home-steps__inner { width: min(100% - 40px, var(--container)); margin: 0 auto; @@ -77,6 +78,7 @@ .home-categories, .home-showcase, +.home-commerce, .home-steps, .home-delivery, .home-portfolio, @@ -88,6 +90,7 @@ .home-categories__inner, .home-showcase__inner, +.home-commerce__inner, .home-steps__inner, .home-delivery__inner, .home-portfolio__inner, @@ -100,6 +103,7 @@ .home-categories__head, .home-showcase__head, +.home-commerce__head, .home-delivery__head, .home-portfolio__head, .home-reviews__head, @@ -184,6 +188,65 @@ font-weight: 800; } +.home-commerce { + background: var(--color-bg); +} + +.home-commerce__inner { + display: grid; + gap: 30px; +} + +.home-commerce__head { + max-width: 850px; +} + +.home-commerce__lead { + max-width: 780px; + color: var(--color-muted); + font-size: var(--fz-md); +} + +.home-commerce__grid { + display: grid; + grid-template-columns: repeat(3, minmax(0, 1fr)); + gap: 18px; +} + +.home-commerce__card { + display: grid; + gap: 10px; + border: 1px solid var(--color-line); + border-radius: var(--radius-md); + background: var(--color-surface); + padding: 22px; + box-shadow: var(--shadow-soft); +} + +.home-commerce__value { + color: var(--color-accent-dark); + font-size: var(--fz-lg); + font-weight: 800; + line-height: 1.1; +} + +.home-commerce__title { + font-size: var(--fz-md); + font-weight: 800; + line-height: 1.2; +} + +.home-commerce__text { + color: var(--color-muted); +} + +.home-commerce__actions { + display: flex; + flex-wrap: wrap; + align-items: center; + gap: 18px; +} + .home-steps { background: var(--color-surface-soft); } diff --git a/wp-content/themes/sevastopol-tort-child/assets/css/responsive.css b/wp-content/themes/sevastopol-tort-child/assets/css/responsive.css index 6365321..0d0bdb1 100644 --- a/wp-content/themes/sevastopol-tort-child/assets/css/responsive.css +++ b/wp-content/themes/sevastopol-tort-child/assets/css/responsive.css @@ -39,12 +39,14 @@ .service-hero, .service-details, + .service-commerce, .service-formats, .service-process, .service-faq, .service-lead, .home-hero, .home-categories, + .home-commerce, .home-steps, .policy-hero, .policy-content, @@ -66,8 +68,10 @@ } .service-details__grid, + .service-commerce__grid, .service-formats__grid, .home-categories__grid, + .home-commerce__grid, .home-delivery__grid, .home-reviews__grid, .site-footer__grid { @@ -91,12 +95,14 @@ .service-hero__inner, .service-details__inner, + .service-commerce__inner, .service-formats__inner, .service-process__inner, .service-faq__inner, .service-lead__inner, .home-hero__inner, .home-categories__inner, + .home-commerce__inner, .home-steps__inner, .site-footer__inner, .policy-hero__inner, diff --git a/wp-content/themes/sevastopol-tort-child/assets/css/service-page.css b/wp-content/themes/sevastopol-tort-child/assets/css/service-page.css index f6deeff..7f11b5c 100644 --- a/wp-content/themes/sevastopol-tort-child/assets/css/service-page.css +++ b/wp-content/themes/sevastopol-tort-child/assets/css/service-page.css @@ -64,18 +64,67 @@ } .service-details, +.service-commerce, .service-process, .service-lead { padding: 70px 0; } .service-details__inner, +.service-commerce__inner, .service-process__inner, .service-lead__inner { width: min(100% - 40px, var(--container)); margin: 0 auto; } +.service-commerce { + background: var(--color-bg); +} + +.service-commerce__inner { + display: grid; + gap: 30px; +} + +.service-commerce__content { + display: grid; + gap: 18px; + max-width: 860px; +} + +.service-commerce__lead { + color: var(--color-muted); + font-size: var(--fz-md); +} + +.service-commerce__grid { + display: grid; + grid-template-columns: repeat(3, minmax(0, 1fr)); + gap: 18px; +} + +.service-commerce__card { + display: grid; + gap: 10px; + border: 1px solid var(--color-line); + border-radius: var(--radius-md); + background: var(--color-surface); + padding: 20px; + box-shadow: var(--shadow-soft); +} + +.service-commerce__label { + color: var(--color-accent-dark); + font-size: var(--fz-md); + font-weight: 800; + line-height: 1.2; +} + +.service-commerce__text { + color: var(--color-muted); +} + .service-details__content { display: grid; gap: 22px; diff --git a/wp-content/themes/sevastopol-tort-child/front-page.php b/wp-content/themes/sevastopol-tort-child/front-page.php index 16d823b..dadd63c 100644 --- a/wp-content/themes/sevastopol-tort-child/front-page.php +++ b/wp-content/themes/sevastopol-tort-child/front-page.php @@ -71,6 +71,51 @@ get_header(); +
+
+
+ Стоимость и условия +

Что входит в расчет торта на заказ

+

Цена зависит от веса, начинки, сложности декора, срочности и адреса доставки. После заявки уточним детали и предложим понятный вариант под ваш повод и бюджет.

+
+
+
+ от 2 300 ₽ +

Бенто и небольшие торты

+

Подойдут для подарка, свидания, мини-праздника или поздравления в офисе.

+
+
+ от 1 кг +

Праздничные форматы

+

Рассчитаем вес по количеству гостей и подскажем удобную подачу.

+
+
+ 2-4 дня +

Оптимальный срок

+

Срочные заказы берем при свободном окне и наличии нужных ингредиентов.

+
+
+ Севастополь +

Доставка и самовывоз

+

Передаем торт курьером в согласованный интервал или готовим к самовывозу.

+
+
+ Начинки +

Подберем вкус

+

Шоколадные, ванильные, ягодные и более нежные варианты под событие.

+
+
+ Декор +

Надписи и дизайн

+

Работаем с референсами, цветовой гаммой, надписями и персональными деталями.

+
+
+
+ + Смотреть цены +
+
+
diff --git a/wp-content/themes/sevastopol-tort-child/functions.php b/wp-content/themes/sevastopol-tort-child/functions.php index 37f8281..737f114 100644 --- a/wp-content/themes/sevastopol-tort-child/functions.php +++ b/wp-content/themes/sevastopol-tort-child/functions.php @@ -78,6 +78,13 @@ add_action( 'wp_head', 'sev_tort_meta_tags', 1 ); function sev_tort_meta_tags() { $page = sev_tort_current_page_config(); + if ( is_front_page() ) { + echo '' . "\n"; + printf( '' . "\n", esc_attr( 'Торты на заказ в Севастополе с доставкой и самовывозом: бенто, детские, свадебные и праздничные торты. Подберем начинку, декор и рассчитаем стоимость после заявки.' ) ); + printf( '' . "\n", esc_url( home_url( '/' ) ) ); + return; + } + if ( ! $page ) { return; } @@ -98,6 +105,157 @@ function sev_tort_meta_tags() { printf( '' . "\n", esc_url( home_url( '/' . $page['slug'] . '/' ) ) ); } +add_filter( 'wp_robots', 'sev_tort_wp_robots', 100 ); +function sev_tort_wp_robots( $robots ) { + $page = sev_tort_current_page_config(); + + if ( is_front_page() || ( $page && ! empty( $page['indexable'] ) ) ) { + unset( $robots['noindex'], $robots['nofollow'] ); + $robots['index'] = true; + $robots['follow'] = true; + $robots['max-image-preview'] = 'large'; + } + + if ( $page && 'politika-konfidencialnosti' === $page['slug'] ) { + unset( $robots['index'], $robots['follow'] ); + $robots['noindex'] = true; + $robots['nofollow'] = true; + } + + return $robots; +} + +add_action( 'wp_head', 'sev_tort_schema_markup', 20 ); +function sev_tort_schema_markup() { + $page = sev_tort_current_page_config(); + $schema = array(); + + $schema[] = array( + '@context' => 'https://schema.org', + '@type' => 'Bakery', + '@id' => home_url( '/#bakery' ), + 'name' => 'Создаем повод для праздника', + 'description' => 'Кондитерская студия в Севастополе: торты на заказ, бенто-торты, детские, свадебные и праздничные торты с доставкой.', + 'url' => home_url( '/' ), + 'image' => get_stylesheet_directory_uri() . '/assets/images/hero/bento-hero-main.png', + 'telephone' => sev_tort_site_phone(), + 'priceRange' => 'от 2 300 ₽', + 'address' => array( + '@type' => 'PostalAddress', + 'addressLocality' => 'Севастополь', + 'addressCountry' => 'RU', + ), + 'areaServed' => array( + '@type' => 'City', + 'name' => 'Севастополь', + ), + 'openingHours' => 'Mo-Su 09:00-20:00', + ); + + $schema[] = array( + '@context' => 'https://schema.org', + '@type' => 'WebSite', + '@id' => home_url( '/#website' ), + 'name' => 'Торты на заказ в Севастополе', + 'url' => home_url( '/' ), + 'publisher' => array( '@id' => home_url( '/#bakery' ) ), + 'inLanguage' => 'ru-RU', + ); + + if ( is_front_page() ) { + $schema[] = sev_tort_faq_schema( + array( + array( + 'q' => 'За сколько дней лучше заказывать торт?', + 'a' => 'Оптимально оставить заявку за 2-4 дня до даты праздника. Срочные заказы возможны при свободном окне в графике.', + ), + array( + 'q' => 'Можно ли сделать торт по фотографии или референсу?', + 'a' => 'Да, можно прислать фото, описание идеи, цветовую гамму и пожелания по надписи. После уточнения деталей предложим подходящий вариант.', + ), + array( + 'q' => 'Есть ли доставка по Севастополю?', + 'a' => 'Да, доставляем по Севастополю в согласованный интервал. Также можно забрать заказ самостоятельно после подтверждения готовности.', + ), + ) + ); + } elseif ( $page && ! empty( $page['indexable'] ) ) { + $schema[] = array( + '@context' => 'https://schema.org', + '@type' => 'Service', + 'name' => $page['h1'], + 'description' => $page['description'], + 'provider' => array( '@id' => home_url( '/#bakery' ) ), + 'areaServed' => array( + '@type' => 'City', + 'name' => 'Севастополь', + ), + 'offers' => array( + '@type' => 'Offer', + 'priceCurrency' => 'RUB', + 'price' => '2300', + 'url' => home_url( '/' . $page['slug'] . '/' ), + ), + ); + + $schema[] = array( + '@context' => 'https://schema.org', + '@type' => 'BreadcrumbList', + 'itemListElement' => array( + array( + '@type' => 'ListItem', + 'position' => 1, + 'name' => 'Главная', + 'item' => home_url( '/' ), + ), + array( + '@type' => 'ListItem', + 'position' => 2, + 'name' => $page['label'], + 'item' => home_url( '/' . $page['slug'] . '/' ), + ), + ), + ); + + if ( ! empty( $page['content']['faq'] ) ) { + $schema[] = sev_tort_faq_schema( $page['content']['faq'] ); + } + } + + foreach ( array_filter( $schema ) as $item ) { + printf( '' . "\n", wp_json_encode( $item, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES ) ); + } +} + +function sev_tort_faq_schema( $items ) { + $entities = array(); + + foreach ( $items as $item ) { + if ( empty( $item['q'] ) || empty( $item['a'] ) ) { + continue; + } + + $entities[] = array( + '@type' => 'Question', + 'name' => $item['q'], + 'acceptedAnswer' => array( + '@type' => 'Answer', + 'text' => $item['a'], + ), + ); + } + + if ( ! $entities ) { + return null; + } + + return array( + '@context' => 'https://schema.org', + '@type' => 'FAQPage', + 'mainEntity' => $entities, + ); +} + add_action( 'wp_head', 'sev_tort_favicon_tags', 2 ); function sev_tort_favicon_tags() { $favicon_uri = get_stylesheet_directory_uri() . '/assets/images/favicon/'; @@ -114,6 +272,10 @@ add_filter( 'pre_get_document_title', 'sev_tort_document_title' ); function sev_tort_document_title( $title ) { $page = sev_tort_current_page_config(); + if ( is_front_page() ) { + return 'Торты на заказ в Севастополе с доставкой — заказать торт'; + } + if ( ! $page ) { return $title; } diff --git a/wp-content/themes/sevastopol-tort-child/page-templates/page-service.php b/wp-content/themes/sevastopol-tort-child/page-templates/page-service.php index 303591b..37faf2d 100644 --- a/wp-content/themes/sevastopol-tort-child/page-templates/page-service.php +++ b/wp-content/themes/sevastopol-tort-child/page-templates/page-service.php @@ -30,6 +30,43 @@ get_header();
+
+
+
+ Расчет заказа +

Что уточним перед изготовлением

+

Чтобы точно назвать стоимость и срок, нам достаточно короткого описания: дата праздника, количество гостей, желаемая начинка, декор и способ получения заказа.

+
+
+
+ Вес +

Подберем размер под гостей и формат праздника.

+
+
+ Начинка +

Предложим вкус под возраст, повод и сезон.

+
+
+ Декор +

Учтем надпись, цвета, референсы и персональные детали.

+
+
+ Срок +

Проверим свободное окно и возможность срочного заказа.

+
+
+ Доставка +

Согласуем адрес, интервал или удобный самовывоз.

+
+
+ Бюджет +

Подскажем, на чем можно упростить или усилить оформление.

+
+
+ +
+
+