fix
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -71,6 +71,51 @@ get_header();
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<section class="home-commerce">
|
||||
<div class="home-commerce__inner">
|
||||
<div class="home-commerce__head">
|
||||
<span class="section-kicker">Стоимость и условия</span>
|
||||
<h2 class="section-title">Что входит в расчет торта на заказ</h2>
|
||||
<p class="home-commerce__lead">Цена зависит от веса, начинки, сложности декора, срочности и адреса доставки. После заявки уточним детали и предложим понятный вариант под ваш повод и бюджет.</p>
|
||||
</div>
|
||||
<div class="home-commerce__grid">
|
||||
<article class="home-commerce__card">
|
||||
<span class="home-commerce__value">от 2 300 ₽</span>
|
||||
<h3 class="home-commerce__title">Бенто и небольшие торты</h3>
|
||||
<p class="home-commerce__text">Подойдут для подарка, свидания, мини-праздника или поздравления в офисе.</p>
|
||||
</article>
|
||||
<article class="home-commerce__card">
|
||||
<span class="home-commerce__value">от 1 кг</span>
|
||||
<h3 class="home-commerce__title">Праздничные форматы</h3>
|
||||
<p class="home-commerce__text">Рассчитаем вес по количеству гостей и подскажем удобную подачу.</p>
|
||||
</article>
|
||||
<article class="home-commerce__card">
|
||||
<span class="home-commerce__value">2-4 дня</span>
|
||||
<h3 class="home-commerce__title">Оптимальный срок</h3>
|
||||
<p class="home-commerce__text">Срочные заказы берем при свободном окне и наличии нужных ингредиентов.</p>
|
||||
</article>
|
||||
<article class="home-commerce__card">
|
||||
<span class="home-commerce__value">Севастополь</span>
|
||||
<h3 class="home-commerce__title">Доставка и самовывоз</h3>
|
||||
<p class="home-commerce__text">Передаем торт курьером в согласованный интервал или готовим к самовывозу.</p>
|
||||
</article>
|
||||
<article class="home-commerce__card">
|
||||
<span class="home-commerce__value">Начинки</span>
|
||||
<h3 class="home-commerce__title">Подберем вкус</h3>
|
||||
<p class="home-commerce__text">Шоколадные, ванильные, ягодные и более нежные варианты под событие.</p>
|
||||
</article>
|
||||
<article class="home-commerce__card">
|
||||
<span class="home-commerce__value">Декор</span>
|
||||
<h3 class="home-commerce__title">Надписи и дизайн</h3>
|
||||
<p class="home-commerce__text">Работаем с референсами, цветовой гаммой, надписями и персональными деталями.</p>
|
||||
</article>
|
||||
</div>
|
||||
<div class="home-commerce__actions">
|
||||
<button class="button-main" type="button" data-lead-open data-lead-source="Рассчитать стоимость: коммерческий блок главной">Рассчитать стоимость</button>
|
||||
<a class="button-link" href="<?php echo esc_url( home_url( '/ceny/' ) ); ?>">Смотреть цены</a>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<section class="home-steps">
|
||||
<div class="home-steps__inner">
|
||||
<div class="home-steps__content">
|
||||
|
||||
@@ -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 '<meta name="robots" content="index, follow">' . "\n";
|
||||
printf( '<meta name="description" content="%s">' . "\n", esc_attr( 'Торты на заказ в Севастополе с доставкой и самовывозом: бенто, детские, свадебные и праздничные торты. Подберем начинку, декор и рассчитаем стоимость после заявки.' ) );
|
||||
printf( '<link rel="canonical" href="%s">' . "\n", esc_url( home_url( '/' ) ) );
|
||||
return;
|
||||
}
|
||||
|
||||
if ( ! $page ) {
|
||||
return;
|
||||
}
|
||||
@@ -98,6 +105,157 @@ function sev_tort_meta_tags() {
|
||||
printf( '<link rel="canonical" href="%s">' . "\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( '<script type="application/ld+json">%s</script>' . "\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;
|
||||
}
|
||||
|
||||
@@ -30,6 +30,43 @@ get_header();
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="service-commerce">
|
||||
<div class="service-commerce__inner">
|
||||
<div class="service-commerce__content">
|
||||
<span class="section-kicker">Расчет заказа</span>
|
||||
<h2 class="section-title">Что уточним перед изготовлением</h2>
|
||||
<p class="service-commerce__lead">Чтобы точно назвать стоимость и срок, нам достаточно короткого описания: дата праздника, количество гостей, желаемая начинка, декор и способ получения заказа.</p>
|
||||
</div>
|
||||
<div class="service-commerce__grid">
|
||||
<article class="service-commerce__card">
|
||||
<span class="service-commerce__label">Вес</span>
|
||||
<p class="service-commerce__text">Подберем размер под гостей и формат праздника.</p>
|
||||
</article>
|
||||
<article class="service-commerce__card">
|
||||
<span class="service-commerce__label">Начинка</span>
|
||||
<p class="service-commerce__text">Предложим вкус под возраст, повод и сезон.</p>
|
||||
</article>
|
||||
<article class="service-commerce__card">
|
||||
<span class="service-commerce__label">Декор</span>
|
||||
<p class="service-commerce__text">Учтем надпись, цвета, референсы и персональные детали.</p>
|
||||
</article>
|
||||
<article class="service-commerce__card">
|
||||
<span class="service-commerce__label">Срок</span>
|
||||
<p class="service-commerce__text">Проверим свободное окно и возможность срочного заказа.</p>
|
||||
</article>
|
||||
<article class="service-commerce__card">
|
||||
<span class="service-commerce__label">Доставка</span>
|
||||
<p class="service-commerce__text">Согласуем адрес, интервал или удобный самовывоз.</p>
|
||||
</article>
|
||||
<article class="service-commerce__card">
|
||||
<span class="service-commerce__label">Бюджет</span>
|
||||
<p class="service-commerce__text">Подскажем, на чем можно упростить или усилить оформление.</p>
|
||||
</article>
|
||||
</div>
|
||||
<button class="button-main" type="button" data-lead-open data-lead-source="Получить расчет: коммерческий блок <?php echo esc_attr( $page['label'] ); ?>">Получить расчет</button>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<?php if ( $intro || $cards ) : ?>
|
||||
<section class="service-details">
|
||||
<div class="service-details__inner">
|
||||
|
||||
Reference in New Issue
Block a user