$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_filter( 'wp_sitemaps_enabled', '__return_false' ); add_filter( 'redirect_canonical', 'sev_tort_disable_static_seo_redirects', 10, 2 ); function sev_tort_disable_static_seo_redirects( $redirect_url, $requested_url ) { if ( sev_tort_is_static_seo_path() ) { return false; } return $redirect_url; } add_action( 'init', 'sev_tort_static_seo_files', 0 ); function sev_tort_static_seo_files() { if ( ! sev_tort_is_static_seo_path() ) { return; } $path = isset( $_SERVER['REQUEST_URI'] ) ? parse_url( wp_unslash( $_SERVER['REQUEST_URI'] ), PHP_URL_PATH ) : ''; $path = trim( (string) $path, '/' ); if ( 'sitemap_index.xml' === $path ) { sev_tort_send_sitemap_index(); } if ( 'sitemap.xml' === $path ) { sev_tort_send_sitemap(); } if ( 'robots.txt' === $path ) { sev_tort_send_robots(); } if ( 'llms.txt' === $path ) { sev_tort_send_llms_txt(); } if ( 'pricing.md' === $path ) { sev_tort_send_pricing_md(); } if ( 'pricing.txt' === $path ) { sev_tort_send_pricing_txt(); } } function sev_tort_is_static_seo_path() { $path = isset( $_SERVER['REQUEST_URI'] ) ? parse_url( wp_unslash( $_SERVER['REQUEST_URI'] ), PHP_URL_PATH ) : ''; $path = trim( (string) $path, '/' ); return in_array( $path, array( 'sitemap.xml', 'sitemap_index.xml', 'robots.txt', 'llms.txt', 'pricing.md', 'pricing.txt' ), true ); } function sev_tort_send_sitemap_index() { status_header( 200 ); header( 'Content-Type: application/xml; charset=UTF-8' ); echo '' . "\n"; echo '' . "\n"; echo "\t" . '' . "\n"; echo "\t\t" . '' . esc_url( home_url( '/sitemap.xml' ) ) . '' . "\n"; echo "\t\t" . '' . esc_html( gmdate( 'Y-m-d' ) ) . '' . "\n"; echo "\t" . '' . "\n"; echo ''; exit; } function sev_tort_send_sitemap() { status_header( 200 ); header( 'Content-Type: application/xml; charset=UTF-8' ); $pages = sev_tort_pages(); $urls = array( array( 'loc' => home_url( '/' ), 'changefreq' => 'weekly', 'priority' => '1.0', ), ); foreach ( $pages as $page ) { if ( empty( $page['indexable'] ) ) { continue; } $priority = in_array( $page['slug'], array( 'torty-na-zakaz', 'bento', 'detskie', 'svadebnye', 'na-den-rozhdeniya', 'ceny' ), true ) ? '0.9' : '0.8'; $urls[] = array( 'loc' => home_url( '/' . $page['slug'] . '/' ), 'changefreq' => 'weekly', 'priority' => $priority, ); } echo '' . "\n"; echo '' . "\n"; foreach ( $urls as $url ) { echo "\t" . '' . "\n"; echo "\t\t" . '' . esc_url( $url['loc'] ) . '' . "\n"; echo "\t\t" . '' . esc_html( gmdate( 'Y-m-d' ) ) . '' . "\n"; echo "\t\t" . '' . esc_html( $url['changefreq'] ) . '' . "\n"; echo "\t\t" . '' . esc_html( $url['priority'] ) . '' . "\n"; echo "\t" . '' . "\n"; } echo ''; exit; } function sev_tort_send_robots() { status_header( 200 ); header( 'Content-Type: text/plain; charset=UTF-8' ); echo "User-agent: *\n"; echo "Disallow: /wp-admin/\n"; echo "Allow: /wp-admin/admin-ajax.php\n"; echo "Disallow: /wp-includes/\n"; echo "Disallow: /wp-content/plugins/\n"; echo "Disallow: /wp-content/cache/\n"; echo "Disallow: /wp-json/\n"; echo "Disallow: /*?s=\n\n"; echo 'Sitemap: ' . esc_url( home_url( '/sitemap.xml' ) ) . "\n"; exit; } function sev_tort_send_llms_txt() { status_header( 200 ); header( 'Content-Type: text/plain; charset=UTF-8' ); echo implode( "\n", sev_tort_llms_lines() ); exit; } function sev_tort_send_pricing_md() { status_header( 200 ); header( 'Content-Type: text/markdown; charset=UTF-8' ); echo implode( "\n", sev_tort_pricing_md_lines() ); exit; } function sev_tort_send_pricing_txt() { status_header( 200 ); header( 'Content-Type: text/plain; charset=UTF-8' ); echo implode( "\n", sev_tort_pricing_txt_lines() ); exit; } function sev_tort_llms_lines() { return array( '# sevastopol-tort.ru', '', 'Сайт кондитерской студии в Севастополе. Основная услуга: торты на заказ с доставкой и самовывозом.', '', '## Кто мы', '- Название: Создаем повод для праздника', '- Город: Севастополь', '- Оператор: ИП Максимов Антон Сергеевич', '- Контактный телефон: ' . sev_tort_site_phone(), '', '## Услуги', '- Торты на заказ: https://sevastopol-tort.ru/torty-na-zakaz/', '- Бенто-торты: https://sevastopol-tort.ru/bento/', '- Детские торты: https://sevastopol-tort.ru/detskie/', '- Свадебные торты: https://sevastopol-tort.ru/svadebnye/', '- Корпоративные торты: https://sevastopol-tort.ru/korporativnye/', '- Торты на день рождения: https://sevastopol-tort.ru/na-den-rozhdeniya/', '- Срочный заказ торта: https://sevastopol-tort.ru/srochnyj-zakaz/', '- Начинки: https://sevastopol-tort.ru/nachinki/', '', '## Цены и условия', '- Машинно-читаемые цены: https://sevastopol-tort.ru/pricing.md', '- Страница цен: https://sevastopol-tort.ru/ceny/', '- Бенто 500-550 г: 1 500-1 800 ₽', '- Бенто макси около 1 кг: 2 200-2 500 ₽', '- Детские и торты на день рождения: 2 000-2 500 ₽/кг', '- Свадебные торты: базово от 3 000-4 000 ₽; сложные многоярусные композиции 10 000-13 000 ₽+', '- Корпоративные торты: 3 500-5 000 ₽+', '- Предоплата: 30%', '- Оплата: наличные, перевод, карта, расчетный счет', '- Доставка: бесплатно от 2 500 ₽; если заказ дешевле 2 500 ₽, доставка 500 ₽', '- География доставки: все районы Севастополя', '', '## Ключевые страницы', '- Доставка и оплата: https://sevastopol-tort.ru/dostavka-i-oplata/', '- Портфолио: https://sevastopol-tort.ru/portfolio/', '- Отзывы: https://sevastopol-tort.ru/otzyvy/', '- FAQ: https://sevastopol-tort.ru/faq/', '- Контакты: https://sevastopol-tort.ru/kontakty/', '- Политика конфиденциальности: https://sevastopol-tort.ru/politika-konfidencialnosti/', ); } function sev_tort_pricing_md_lines() { return array( '# Pricing — Торты на заказ в Севастополе', '', 'Last updated: ' . gmdate( 'Y-m-d' ), '', '## Бенто', '- Format: базовый бенто', '- Weight: около 500-550 г', '- Price: 1 500-1 800 ₽', '- Timing: обычно 2-4 дня; срочно при свободном окне', '- Good for: подарок, свидание, небольшое поздравление', '', '## Бенто макси', '- Format: увеличенный бенто', '- Weight: около 1 кг', '- Price: 2 200-2 500 ₽', '- Timing: обычно 2-4 дня', '- Good for: компактный торт на несколько порций', '', '## Детские торты', '- Format: детский торт на заказ', '- Weight: рассчитывается по числу гостей', '- Price: 2 000-2 500 ₽/кг', '- Extras: фигурки из мастики, съедобная печать и сложная тема увеличивают цену', '- Timing: лучше заказывать за 2-4 дня, сложный декор заранее', '', '## Торты на день рождения', '- Format: тематический праздничный торт', '- Weight: рассчитывается по числу гостей', '- Price: 2 000-2 500 ₽/кг', '- Extras: индивидуальный декор, цифры, персонажи и печать увеличивают цену', '', '## Свадебные торты', '- Format: свадебный торт, одноярусный или многоярусный', '- Price: базовый ярусный торт от 3 000-4 000 ₽', '- Complex design: 10 000-13 000 ₽+', '- Extras: цветы, ленты, монограмма, сложная сборка, доставка на площадку', '- Timing: лучше обсуждать за 1-3 недели', '', '## Корпоративные торты', '- Format: торт с логотипом, фирменными цветами или тематическим дизайном', '- Price: 3 500-5 000 ₽+', '- Payment: наличные, перевод, карта, расчетный счет', '', '## Delivery and payment', '- City: Севастополь', '- Delivery area: все районы Севастополя', '- Delivery price: бесплатно от 2 500 ₽; иначе 500 ₽', '- Pickup: available by agreement', '- Prepayment: 30%', '- Payment methods: наличные, перевод, карта, расчетный счет', '', '## Exact quote', 'Точная стоимость зависит от веса, начинки, декора, срочности и доставки. Для расчета нужно указать дату, повод, количество гостей, желаемую начинку, декор и адрес доставки.', ); } function sev_tort_pricing_txt_lines() { return array( 'Торты на заказ в Севастополе — цены', 'Бенто 500-550 г: 1 500-1 800 ₽; срок обычно 2-4 дня; срочно при свободном окне.', 'Бенто макси около 1 кг: 2 200-2 500 ₽; срок обычно 2-4 дня.', 'Детские торты: 2 000-2 500 ₽/кг; фигурки, съедобная печать и сложная тема увеличивают цену.', 'Торты на день рождения: 2 000-2 500 ₽/кг; индивидуальный декор считается отдельно.', 'Свадебные торты: базово от 3 000-4 000 ₽; сложные многоярусные композиции 10 000-13 000 ₽+.', 'Корпоративные торты: 3 500-5 000 ₽+; возможна оплата на расчетный счет.', 'Доставка по всем районам Севастополя: бесплатно от 2 500 ₽; иначе 500 ₽.', 'Самовывоз: доступен по согласованию.', 'Предоплата: 30%.', 'Оплата: наличные, перевод, карта, расчетный счет.', 'Точный расчет зависит от веса, начинки, декора, срочности и адреса доставки.', ); } 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'; } if ( 'portfolio' === $page['slug'] ) { return get_stylesheet_directory() . '/page-templates/page-portfolio.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; }