tema
This commit is contained in:
64
wp-content/themes/sevastopol-tort-child/inc/forms.php
Normal file
64
wp-content/themes/sevastopol-tort-child/inc/forms.php
Normal 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;
|
||||
}
|
||||
56
wp-content/themes/sevastopol-tort-child/inc/routes.php
Normal file
56
wp-content/themes/sevastopol-tort-child/inc/routes.php
Normal 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;
|
||||
}
|
||||
221
wp-content/themes/sevastopol-tort-child/inc/theme-data.php
Normal file
221
wp-content/themes/sevastopol-tort-child/inc/theme-data.php
Normal 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';
|
||||
}
|
||||
Reference in New Issue
Block a user