This commit is contained in:
2026-07-04 17:34:07 +03:00
parent d896d41240
commit 762242f193
22 changed files with 1880 additions and 1 deletions

View File

@@ -0,0 +1,64 @@
<?php
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
add_action( 'admin_post_nopriv_sev_tort_lead', 'sev_tort_handle_lead_form' );
add_action( 'admin_post_sev_tort_lead', 'sev_tort_handle_lead_form' );
function sev_tort_handle_lead_form() {
if ( empty( $_POST['sev_tort_nonce'] ) || ! wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['sev_tort_nonce'] ) ), 'sev_tort_lead' ) ) {
sev_tort_redirect_form_status( 'error' );
}
if ( empty( $_POST['personal_data_agree'] ) ) {
sev_tort_redirect_form_status( 'consent' );
}
$name = isset( $_POST['lead_name'] ) ? sanitize_text_field( wp_unslash( $_POST['lead_name'] ) ) : '';
$phone = isset( $_POST['lead_phone'] ) ? sanitize_text_field( wp_unslash( $_POST['lead_phone'] ) ) : '';
$message = isset( $_POST['lead_message'] ) ? sanitize_textarea_field( wp_unslash( $_POST['lead_message'] ) ) : '';
$page = isset( $_POST['lead_page'] ) ? sanitize_text_field( wp_unslash( $_POST['lead_page'] ) ) : '';
if ( '' === $phone ) {
sev_tort_redirect_form_status( 'error' );
}
$text = "Новая заявка с сайта sevastopol-tort.ru\n";
$text .= "Страница: " . $page . "\n";
$text .= "Имя: " . ( $name ? $name : 'не указано' ) . "\n";
$text .= "Телефон: " . $phone . "\n";
$text .= "Комментарий: " . ( $message ? $message : 'не указан' );
$sent = sev_tort_send_telegram_message( $text );
sev_tort_redirect_form_status( $sent ? 'success' : 'queued' );
}
function sev_tort_send_telegram_message( $text ) {
if ( ! defined( 'SEV_TORT_TELEGRAM_BOT_TOKEN' ) || ! defined( 'SEV_TORT_TELEGRAM_CHAT_ID' ) ) {
return false;
}
$response = wp_remote_post(
'https://api.telegram.org/bot' . SEV_TORT_TELEGRAM_BOT_TOKEN . '/sendMessage',
array(
'timeout' => 10,
'body' => array(
'chat_id' => SEV_TORT_TELEGRAM_CHAT_ID,
'text' => $text,
),
)
);
return ! is_wp_error( $response ) && 200 === wp_remote_retrieve_response_code( $response );
}
function sev_tort_redirect_form_status( $status ) {
$referer = wp_get_referer();
$url = $referer ? $referer : home_url( '/' );
wp_safe_redirect( add_query_arg( 'form_status', $status, $url ) );
exit;
}

View File

@@ -0,0 +1,56 @@
<?php
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
add_action( 'init', 'sev_tort_register_rewrite_rules' );
function sev_tort_register_rewrite_rules() {
foreach ( sev_tort_pages() as $slug => $page ) {
add_rewrite_rule( '^' . preg_quote( $slug, '/' ) . '/?$', 'index.php?sev_tort_page=' . $slug, 'top' );
}
}
add_filter( 'query_vars', 'sev_tort_query_vars' );
function sev_tort_query_vars( $vars ) {
$vars[] = 'sev_tort_page';
return $vars;
}
add_action( 'template_redirect', 'sev_tort_route_status' );
function sev_tort_route_status() {
if ( sev_tort_current_page_config() ) {
status_header( 200 );
}
}
add_filter( 'template_include', 'sev_tort_template_include' );
function sev_tort_template_include( $template ) {
$page = sev_tort_current_page_config();
if ( ! $page ) {
return $template;
}
if ( 'politika-konfidencialnosti' === $page['slug'] ) {
return get_stylesheet_directory() . '/page-templates/page-policy.php';
}
return get_stylesheet_directory() . '/page-templates/page-service.php';
}
function sev_tort_current_page_config() {
$slug = get_query_var( 'sev_tort_page' );
if ( ! $slug && is_front_page() ) {
return false;
}
if ( ! $slug && is_page() ) {
$slug = get_post_field( 'post_name', get_queried_object_id() );
}
$pages = sev_tort_pages();
return isset( $pages[ $slug ] ) ? $pages[ $slug ] : false;
}

View File

@@ -0,0 +1,221 @@
<?php
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
function sev_tort_site_phone() {
return '+7 (978) 000-00-00';
}
function sev_tort_site_phone_href() {
return 'tel:+79780000000';
}
function sev_tort_whatsapp_url() {
return 'https://wa.me/79780000000';
}
function sev_tort_telegram_url() {
return 'https://t.me/sevastopol_tort';
}
function sev_tort_pages() {
return array(
'torty-na-zakaz' => array(
'slug' => 'torty-na-zakaz',
'label' => 'Торты на заказ',
'title' => 'Торты на заказ в Севастополе',
'description' => 'Авторские торты на заказ в Севастополе: бенто, детские, свадебные и праздничные торты с доставкой.',
'h1' => 'Торты на заказ в Севастополе',
'lead' => 'Подберем вес, начинку, декор и дату выдачи под ваш праздник. Заявка не обязывает к заказу: сначала уточним идею и ориентир по цене.',
'image' => 'cake-010.jpg',
'style' => 'service-page.css',
'indexable' => false,
),
'bento' => array(
'slug' => 'bento',
'label' => 'Бенто',
'title' => 'Бенто торты в Севастополе',
'description' => 'Бенто торты на заказ в Севастополе для дня рождения, свидания, подарка или небольшого праздника.',
'h1' => 'Бенто торты на заказ',
'lead' => 'Компактный торт с персональной надписью, иллюстрацией или минималистичным декором для теплого повода.',
'image' => 'cake-001.jpg',
'style' => 'service-page.css',
'indexable' => false,
),
'detskie' => array(
'slug' => 'detskie',
'label' => 'Детские',
'title' => 'Детские торты на заказ в Севастополе',
'description' => 'Детские торты на заказ в Севастополе: яркий декор, любимые персонажи, безопасные начинки.',
'h1' => 'Детские торты на заказ',
'lead' => 'Соберем торт под возраст, тему праздника и пожелания родителей: от нежного декора до ярких сюжетов.',
'image' => 'medobory_torty_na_zakaz/cake-202.jpg',
'style' => 'service-page.css',
'indexable' => false,
),
'svadebnye' => array(
'slug' => 'svadebnye',
'label' => 'Свадебные',
'title' => 'Свадебные торты в Севастополе',
'description' => 'Свадебные торты на заказ в Севастополе: многоярусные композиции, дегустация начинок, доставка к банкету.',
'h1' => 'Свадебные торты',
'lead' => 'Продумываем торт под стиль свадьбы, количество гостей, подачу и безопасную доставку к площадке.',
'image' => 'stefanycake_torty_na_zakaz/cake-057.jpg',
'style' => 'service-page.css',
'indexable' => false,
),
'korporativnye' => array(
'slug' => 'korporativnye',
'label' => 'Корпоративные',
'title' => 'Корпоративные торты в Севастополе',
'description' => 'Корпоративные торты с логотипом и фирменным декором для мероприятий, презентаций и праздников.',
'h1' => 'Корпоративные торты',
'lead' => 'Сделаем торт для команды, клиента или события компании: аккуратно, в срок и в нужной стилистике.',
'image' => 'stefanycake_torty_na_zakaz/cake-028.jpg',
'style' => 'service-page.css',
'indexable' => false,
),
'na-den-rozhdeniya' => array(
'slug' => 'na-den-rozhdeniya',
'label' => 'На день рождения',
'title' => 'Торт на день рождения в Севастополе',
'description' => 'Торты на день рождения в Севастополе для взрослых и детей: дизайн по фото, надписи, ягоды, шоколад.',
'h1' => 'Торты на день рождения',
'lead' => 'Поможем выбрать формат, который смотрится празднично, удобно режется и нравится имениннику.',
'image' => 'stefanycake_torty_na_zakaz/cake-024.jpg',
'style' => 'service-page.css',
'indexable' => false,
),
'srochnyj-zakaz' => array(
'slug' => 'srochnyj-zakaz',
'label' => 'Срочный заказ',
'title' => 'Срочный заказ торта в Севастополе',
'description' => 'Срочный заказ торта в Севастополе при наличии свободного окна производства.',
'h1' => 'Срочный заказ торта',
'lead' => 'Если праздник уже близко, оставьте заявку: проверим свободное окно и предложим доступные форматы декора.',
'image' => 'cake-025.jpg',
'style' => 'service-page.css',
'indexable' => false,
),
'nachinki' => array(
'slug' => 'nachinki',
'label' => 'Начинки',
'title' => 'Начинки для тортов',
'description' => 'Начинки для тортов на заказ: шоколад, ягоды, карамель, творожный крем и сезонные сочетания.',
'h1' => 'Начинки для тортов',
'lead' => 'Подберем вкус под формат праздника: легкий, шоколадный, ягодный или сбалансированный для большой компании.',
'image' => 'stefanycake_torty_na_zakaz/cake-038.jpg',
'style' => 'service-page.css',
'indexable' => false,
),
'ceny' => array(
'slug' => 'ceny',
'label' => 'Цены',
'title' => 'Цены на торты в Севастополе',
'description' => 'Ориентировочные цены на торты на заказ в Севастополе: бенто, классические, свадебные и срочные заказы.',
'h1' => 'Цены и веса',
'lead' => 'Стоимость зависит от веса, начинки, сложности декора и срочности. Ниже ориентиры, точную цену уточним после заявки.',
'image' => 'cake-006.jpg',
'style' => 'service-page.css',
'indexable' => false,
),
'dostavka-i-oplata' => array(
'slug' => 'dostavka-i-oplata',
'label' => 'Доставка и оплата',
'title' => 'Доставка и оплата тортов в Севастополе',
'description' => 'Условия доставки, самовывоза и оплаты тортов на заказ в Севастополе.',
'h1' => 'Доставка и оплата',
'lead' => 'Согласуем удобный интервал, аккуратно упакуем торт и заранее подскажем, как безопасно хранить заказ.',
'image' => 'cake-020.jpg',
'style' => 'service-page.css',
'indexable' => false,
),
'portfolio' => array(
'slug' => 'portfolio',
'label' => 'Портфолио',
'title' => 'Портфолио тортов',
'description' => 'Портфолио авторских тортов на заказ в Севастополе: бенто, детские, свадебные и праздничные работы.',
'h1' => 'Портфолио тортов',
'lead' => 'Собрали примеры работ, чтобы было проще выбрать стиль, цвет, формат и уровень детализации.',
'image' => 'stefanycake_torty_na_zakaz/cake-070.jpg',
'style' => 'service-page.css',
'indexable' => false,
),
'otzyvy' => array(
'slug' => 'otzyvy',
'label' => 'Отзывы',
'title' => 'Отзывы о тортах на заказ',
'description' => 'Отзывы клиентов о тортах на заказ, доставке и подборе начинок в Севастополе.',
'h1' => 'Отзывы клиентов',
'lead' => 'Отзывы помогают понять, как мы работаем с идеями, сроками, доставкой и вкусами.',
'image' => 'cake-015.jpg',
'style' => 'service-page.css',
'indexable' => false,
),
'faq' => array(
'slug' => 'faq',
'label' => 'FAQ',
'title' => 'Вопросы о заказе тортов',
'description' => 'Ответы на частые вопросы о сроках, доставке, начинках, оплате и заказе тортов в Севастополе.',
'h1' => 'Частые вопросы',
'lead' => 'Собрали ответы на вопросы, которые обычно появляются перед первым заказом.',
'image' => 'cake-030.jpg',
'style' => 'service-page.css',
'indexable' => false,
),
'kontakty' => array(
'slug' => 'kontakty',
'label' => 'Контакты',
'title' => 'Контакты кондитерской студии',
'description' => 'Контакты кондитерской студии в Севастополе: телефон, мессенджеры, режим работы и форма заявки.',
'h1' => 'Контакты',
'lead' => 'Напишите нам удобным способом или оставьте заявку, и мы вернемся с уточняющими вопросами по торту.',
'image' => 'cake-025.jpg',
'style' => 'service-page.css',
'indexable' => false,
),
'politika-konfidencialnosti' => array(
'slug' => 'politika-konfidencialnosti',
'label' => 'Политика конфиденциальности',
'title' => 'Политика конфиденциальности',
'description' => 'Политика обработки персональных данных и использования cookie на сайте sevastopol-tort.ru.',
'h1' => 'Политика конфиденциальности',
'lead' => 'Документ описывает, какие данные собирает сайт и как они используются для обработки заявок.',
'image' => 'cake-038.jpg',
'style' => 'policy-page.css',
'indexable' => false,
),
);
}
function sev_tort_nav_pages() {
$pages = sev_tort_pages();
$slugs = array(
'torty-na-zakaz',
'bento',
'detskie',
'svadebnye',
'korporativnye',
'na-den-rozhdeniya',
'srochnyj-zakaz',
'nachinki',
'ceny',
'dostavka-i-oplata',
'portfolio',
'otzyvy',
'faq',
'kontakty',
);
return array_intersect_key( $pages, array_flip( $slugs ) );
}
function sev_tort_asset_image( $file ) {
return get_template_directory_uri() . '/assets/images/images/' . ltrim( $file, '/' );
}
function sev_tort_logo_url() {
return get_template_directory_uri() . '/assets/images/tort.png';
}