diff --git a/wp-content/themes/dekart/assets/css/camp.css b/wp-content/themes/dekart/assets/css/camp.css index 3b5f7de..29fd862 100644 --- a/wp-content/themes/dekart/assets/css/camp.css +++ b/wp-content/themes/dekart/assets/css/camp.css @@ -2190,4 +2190,268 @@ p { width: 27px; display: flex; } -} \ No newline at end of file +}/* ═══════════════════════════════════════════════ + HERO — Galileo-style (городской лагерь) + ═══════════════════════════════════════════════ */ + +.hero-media-search { + background-color: #f6f1e9; + overflow: hidden; + padding: 30px 0; + margin-left: -20px; + margin-right: -20px; +} +@media (min-width: 1024px) { + .hero-media-search { padding: 75px 0; } +} + +.hero-media-search .container { + max-width: 1216px; + margin: 0 auto; + padding: 0 24px; +} + +.hero-media-search__container { + align-items: stretch; + display: flex; + flex-direction: column; + gap: 20px; + justify-content: flex-start; +} +@media (min-width: 1024px) { + .hero-media-search__container { + align-items: center; + flex-direction: row; + gap: 40px; + justify-content: space-between; + } +} + +.hero-media-search .heading-1 { + letter-spacing: -.56px; + text-align: center; + font-size: 2.25rem; + font-family: 'Fredoka', sans-serif; + line-height: 1.1; + color: #1c2b2d; + margin: 0; +} +@media (min-width: 1024px) { + .hero-media-search .heading-1 { + font-size: 3.5rem; + text-align: left; + } +} +.hero-media-search .heading-1 span { + display: block; + letter-spacing: -1.68px; + line-height: 1.2; +} +.heading-highlight.blue span { color: #39b7ea; } + +.hero-media-search__content { + text-align: center; +} +@media (min-width: 1024px) { + .hero-media-search__content { + width: 420px; + text-align: left; + flex-shrink: 0; + } +} + +.hero-media-search__propositions.on-desktop { + display: flex; + gap: 0 25px; + justify-content: center; + margin: 15px 0 30px; +} +@media (min-width: 1024px) { + .hero-media-search__propositions.on-desktop { + justify-content: flex-start; + } +} +.hero-media-search__propositions.on-desktop .wrapper__propositions { + display: flex; + flex-direction: column; + align-items: center; + width: 100px; +} +.hero-media-search__propositions.on-desktop img { width: 58px; height: auto; } +.hero-media-search__propositions.on-desktop h3 { + font-weight: 800; + font-family: 'Fredoka', sans-serif; + font-size: 16px; + line-height: 1.2; + text-align: center; + color: #1c2b2d; + margin: 4px 0 0; +} +.hero-media-search__propositions.on-desktop p { + font-weight: 500; + font-family: 'Inter', sans-serif; + font-size: 14px; + line-height: 1.2; + text-align: center; + color: #555; + margin: 0; + text-transform: capitalize; +} + +.hero-media-search__form { text-align: center; } +@media (min-width: 1024px) { + .hero-media-search__form { text-align: left; } +} +.hero-media-search__form .heading-4 { + font-family: 'Inter', sans-serif; + font-size: 18px; + font-weight: 600; + color: #1c2b2d; + margin-bottom: 18px; +} + +.form__field { + display: flex; +} +.form__field input { + flex: 1; + padding: 12px 18px; + border: 2px solid #0c161f; + font-family: 'Inter', sans-serif; + font-size: 16px; + outline: none; + min-width: 0; + border-radius: 100px 0 0 100px; +} +.form__field input::placeholder { color: #999; } +.form__field .btn { + display: inline-flex; + align-items: center; + justify-content: center; + padding: 12px 24px; + background-color: #39b7ea; + color: #fff; + border: 2px solid #0c161f; + border-left: none; + border-radius: 0 100px 100px 0; + font-family: 'Inter', sans-serif; + font-size: 16px; + font-weight: 700; + cursor: pointer; + white-space: nowrap; + margin: 0; + text-decoration: none; +} +.form__field .btn:hover { + background-color: #2a9fd8; +} + +.hero-media-search__media { width: 100%; } +@media (min-width: 1024px) { + .hero-media-search__media { + width: calc(100% - 460px); + min-width: 0; + } +} + +.hero-media-search__frame { + position: relative; + aspect-ratio: 16 / 9; + width: 100%; +} +@media (max-width: 991px) { + .hero-media-search__frame { aspect-ratio: 16 / 10; } +} + +.hero-media-search__image { + display: block; + width: 100%; + height: auto; + border: 5px solid #fff; + border-radius: 15px; + box-shadow: 0 0 20px 0 rgba(0,0,0,.15); + overflow: hidden; + object-fit: cover; + aspect-ratio: 16/9; +} +@media (min-width: 1024px) { + .hero-media-search__image { + border-width: 10px; + max-width: 840px; + } +} + +.hero-media-search__frame .doodle { + position: absolute; + object-fit: contain; +} +.hero-media-search__frame .doodle--top-left { + height: 79px; + width: 84px; + left: -30px; + top: -8px; +} +@media (min-width: 1024px) { + .hero-media-search__frame .doodle--top-left { + height: 172px; + width: 183px; + left: -47px; + top: -54px; + } +} +.hero-media-search__frame .doodle--bottom-right { + height: 100px; + width: 99px; + bottom: -34px; + right: -16px; +} +@media (min-width: 1024px) { + .hero-media-search__frame .doodle--bottom-right { + height: 196px; + width: 195px; + bottom: -46px; + right: -44px; + } +} + +.hero-media-search__propositions.on-mobile { + display: none; + gap: 0 25px; + justify-content: center; + margin: 30px 0 15px; +} +@media (max-width: 1023px) { + .hero-media-search__propositions.on-mobile { display: flex; } +} +.hero-media-search__propositions.on-mobile .wrapper__propositions { + display: flex; + flex-direction: column; + align-items: center; + width: 84px; +} +.hero-media-search__propositions.on-mobile img { width: 48px; height: auto; } +.hero-media-search__propositions.on-mobile h3 { + font-weight: 800; + font-family: 'Fredoka', sans-serif; + font-size: 14px; + line-height: 1.2; + text-align: center; + color: #1c2b2d; + margin: 4px 0 0; +} +.hero-media-search__propositions.on-mobile p { + font-weight: 500; + font-family: 'Inter', sans-serif; + font-size: 14px; + line-height: 1.2; + text-align: center; + color: #555; + margin: 0; +} + +.hero-media-search__wrapper .hero-media-search__form { + margin-top: 15px; +} +@media (min-width: 1024px) { + .hero-media-search__wrapper .hero-media-search__form { display: none; } +} diff --git a/wp-content/themes/dekart/assets/images/doodle-award.png b/wp-content/themes/dekart/assets/images/doodle-award.png new file mode 100644 index 0000000..99af016 Binary files /dev/null and b/wp-content/themes/dekart/assets/images/doodle-award.png differ diff --git a/wp-content/themes/dekart/assets/images/doodle-bulb.png b/wp-content/themes/dekart/assets/images/doodle-bulb.png new file mode 100644 index 0000000..7390ebc Binary files /dev/null and b/wp-content/themes/dekart/assets/images/doodle-bulb.png differ diff --git a/wp-content/themes/dekart/assets/images/doodle-gears.svg b/wp-content/themes/dekart/assets/images/doodle-gears.svg new file mode 100644 index 0000000..ff2c400 --- /dev/null +++ b/wp-content/themes/dekart/assets/images/doodle-gears.svg @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/wp-content/themes/dekart/assets/images/doodle-home.png b/wp-content/themes/dekart/assets/images/doodle-home.png new file mode 100644 index 0000000..67ab043 Binary files /dev/null and b/wp-content/themes/dekart/assets/images/doodle-home.png differ diff --git a/wp-content/themes/dekart/assets/images/doodle-pencils.svg b/wp-content/themes/dekart/assets/images/doodle-pencils.svg new file mode 100644 index 0000000..cd78413 --- /dev/null +++ b/wp-content/themes/dekart/assets/images/doodle-pencils.svg @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/wp-content/themes/dekart/assets/images/doodles/doodle-award.svg b/wp-content/themes/dekart/assets/images/doodles/doodle-award.svg new file mode 100644 index 0000000..53be8df --- /dev/null +++ b/wp-content/themes/dekart/assets/images/doodles/doodle-award.svg @@ -0,0 +1,4 @@ + + + + diff --git a/wp-content/themes/dekart/assets/images/doodles/doodle-bulb.svg b/wp-content/themes/dekart/assets/images/doodles/doodle-bulb.svg new file mode 100644 index 0000000..dca5124 --- /dev/null +++ b/wp-content/themes/dekart/assets/images/doodles/doodle-bulb.svg @@ -0,0 +1 @@ + diff --git a/wp-content/themes/dekart/assets/images/doodles/doodle-circle-orange.svg b/wp-content/themes/dekart/assets/images/doodles/doodle-circle-orange.svg new file mode 100644 index 0000000..b10a097 --- /dev/null +++ b/wp-content/themes/dekart/assets/images/doodles/doodle-circle-orange.svg @@ -0,0 +1,3 @@ + + + diff --git a/wp-content/themes/dekart/assets/images/doodles/doodle-gears.svg b/wp-content/themes/dekart/assets/images/doodles/doodle-gears.svg new file mode 100644 index 0000000..c9d6892 --- /dev/null +++ b/wp-content/themes/dekart/assets/images/doodles/doodle-gears.svg @@ -0,0 +1,4 @@ + + + + diff --git a/wp-content/themes/dekart/assets/images/doodles/doodle-pencils.svg b/wp-content/themes/dekart/assets/images/doodles/doodle-pencils.svg new file mode 100644 index 0000000..c2ecd6e --- /dev/null +++ b/wp-content/themes/dekart/assets/images/doodles/doodle-pencils.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/wp-content/themes/dekart/assets/images/doodles/doodle-plane.svg b/wp-content/themes/dekart/assets/images/doodles/doodle-plane.svg new file mode 100644 index 0000000..aaaf909 --- /dev/null +++ b/wp-content/themes/dekart/assets/images/doodles/doodle-plane.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/wp-content/themes/dekart/assets/images/doodles/doodle-star.svg b/wp-content/themes/dekart/assets/images/doodles/doodle-star.svg new file mode 100644 index 0000000..98c8a72 --- /dev/null +++ b/wp-content/themes/dekart/assets/images/doodles/doodle-star.svg @@ -0,0 +1 @@ + diff --git a/wp-content/themes/dekart/assets/images/doodles/hero-doodle-gears.svg b/wp-content/themes/dekart/assets/images/doodles/hero-doodle-gears.svg new file mode 100644 index 0000000..ff2c400 --- /dev/null +++ b/wp-content/themes/dekart/assets/images/doodles/hero-doodle-gears.svg @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/wp-content/themes/dekart/assets/images/doodles/hero-doodle-pencils.svg b/wp-content/themes/dekart/assets/images/doodles/hero-doodle-pencils.svg new file mode 100644 index 0000000..cd78413 --- /dev/null +++ b/wp-content/themes/dekart/assets/images/doodles/hero-doodle-pencils.svg @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/wp-content/themes/dekart/assets/images/doodles/icon-award.png b/wp-content/themes/dekart/assets/images/doodles/icon-award.png new file mode 100644 index 0000000..99af016 Binary files /dev/null and b/wp-content/themes/dekart/assets/images/doodles/icon-award.png differ diff --git a/wp-content/themes/dekart/assets/images/doodles/icon-bulb.png b/wp-content/themes/dekart/assets/images/doodles/icon-bulb.png new file mode 100644 index 0000000..7390ebc Binary files /dev/null and b/wp-content/themes/dekart/assets/images/doodles/icon-bulb.png differ diff --git a/wp-content/themes/dekart/assets/images/doodles/icon-home.png b/wp-content/themes/dekart/assets/images/doodles/icon-home.png new file mode 100644 index 0000000..67ab043 Binary files /dev/null and b/wp-content/themes/dekart/assets/images/doodles/icon-home.png differ diff --git a/wp-content/themes/dekart/assets/images/icon-camp.svg b/wp-content/themes/dekart/assets/images/icon-camp.svg new file mode 100644 index 0000000..6fcb841 --- /dev/null +++ b/wp-content/themes/dekart/assets/images/icon-camp.svg @@ -0,0 +1 @@ + diff --git a/wp-content/themes/dekart/assets/images/icon-discount.svg b/wp-content/themes/dekart/assets/images/icon-discount.svg new file mode 100644 index 0000000..5a768c3 --- /dev/null +++ b/wp-content/themes/dekart/assets/images/icon-discount.svg @@ -0,0 +1 @@ + diff --git a/wp-content/themes/dekart/assets/images/icon-kids.svg b/wp-content/themes/dekart/assets/images/icon-kids.svg new file mode 100644 index 0000000..b199e2a --- /dev/null +++ b/wp-content/themes/dekart/assets/images/icon-kids.svg @@ -0,0 +1 @@ + diff --git a/wp-content/themes/dekart/camp-hero.php b/wp-content/themes/dekart/camp-hero.php new file mode 100644 index 0000000..7ab4772 --- /dev/null +++ b/wp-content/themes/dekart/camp-hero.php @@ -0,0 +1,81 @@ + + diff --git a/wp-content/themes/dekart/functions.php b/wp-content/themes/dekart/functions.php index 072fa4d..b822552 100644 --- a/wp-content/themes/dekart/functions.php +++ b/wp-content/themes/dekart/functions.php @@ -535,65 +535,137 @@ function add_carbon() { // ==================================================== // Доп поля для страницы "ГОРОДСКОЙ ЛАГЕРЬ" // ==================================================== - Container::make('post_meta', 'Настройки Городской Лагерь') + Container::make('post_meta', '🏰 Настройки Городской Лагерь') ->where('post_template', '=', 'page-camp.php') - ->add_tab('Баннер', array( - Field::make( 'image', 'banner_img', 'Изображение для баннера' ), - Field::make( 'text', 'banner_title', 'Текст заголовка H1:' ), - Field::make( 'textarea', 'banner_text', 'Текст под заголовком:' ), - Field::make( 'text', 'banner_label1', 'Тестовая метка:' ) - ->set_default_value('6,5–11 лет'), - Field::make( 'text', 'banner_label2', 'Тестовая метка:' ) - ->set_default_value('мастер-классы'), - Field::make( 'text', 'banner_label3', 'Тестовая метка:' ) - ->set_default_value('коммуникация'), + ->add_tab('🎯 Hero — первый экран', array( + Field::make( 'separator', 'hero_media_sep', 'Изображения' ), + Field::make( 'image', 'banner_img', 'Фото на весь экран (десктоп)' ) + ->set_help_text( 'Рекомендуемый размер: 1920×1080 px. Формат: WebP. Дети в движении, эмоции, крупные планы.' ) + ->set_width( 50 ), + Field::make( 'image', 'hero_img_mobile', 'Фото на мобильных (опционально)' ) + ->set_help_text( 'Рекомендуемый размер: 480×320 px. WebP. Если не заполнено — автоматически используется основное.' ) + ->set_width( 50 ), + Field::make( 'separator', 'hero_titles_sep', 'Заголовки и текст' ), + Field::make( 'text', 'hero_title_h1', 'Заголовок H1 (первая часть)' ) + ->set_default_value( 'Лето, которое он запомнит навсегда' ) + ->set_width( 50 ) + ->set_help_text( 'Основной заголовок страницы. Эмоциональный, зацепляющий.' ), + Field::make( 'text', 'hero_title_span', 'Заголовок H1 (вторая часть, цветная)' ) + ->set_default_value( 'Big Summer Fun!' ) + ->set_width( 50 ) + ->set_help_text( 'Выделяется цветом на фоне основного.' ), + Field::make( 'textarea', 'banner_text', 'Подзаголовок (под H1)' ) + ->set_default_value( 'Городской лагерь для детей 7–14 лет: наука, творчество и настоящие приключения каждый день' ) + ->set_help_text( '1–2 предложения. Покажите выгоду для родителя.' ), + Field::make( 'text', 'banner_title', 'Заголовок H1 (для старого шаблона)' ) + ->set_default_value( 'Лето, которое он запомнит навсегда' ) + ->set_width( 100 ), + Field::make( 'text', 'banner_label1', 'Метка 1 на баннере' ) + ->set_default_value( '6,5–11 лет' ) + ->set_width( 33 ), + Field::make( 'text', 'banner_label2', 'Метка 2 на баннере' ) + ->set_default_value( 'мастер-классы' ) + ->set_width( 33 ), + Field::make( 'text', 'banner_label3', 'Метка 3 на баннере' ) + ->set_default_value( 'коммуникация' ) + ->set_width( 33 ), + Field::make( 'separator', 'hero_cta_sep', 'Кнопки и ссылки' ), + Field::make( 'text', 'hero_btn_primary', 'Текст главной кнопки (CTA)' ) + ->set_default_value( 'Записаться на пробный день' ) + ->set_width( 50 ) + ->set_help_text( 'Главное действие, к которому призываем. Лучше: конкретная выгода, а не действие.' ), + Field::make( 'text', 'hero_btn_primary_link', 'Ссылка главной кнопки' ) + ->set_default_value( '#programs' ) + ->set_width( 50 ) + ->set_help_text( 'URL или якорь (#) на секцию.' ), + Field::make( 'text', 'hero_btn_secondary', 'Текст второй кнопки' ) + ->set_default_value( 'Посмотреть программу' ) + ->set_width( 50 ) + ->set_help_text( 'Второстепенное действие, обычно outline-стиль.' ), + Field::make( 'text', 'hero_btn_secondary_link', 'Ссылка второй кнопки' ) + ->set_default_value( '#programs' ) + ->set_width( 50 ) + ->set_help_text( 'URL или якорь (#) на секцию.' ), + Field::make( 'separator', 'hero_search_sep', 'Форма поиска лагеря' ), + Field::make( 'separator', 'hero_metrics_sep', 'Метрики доверия (блок достижений)' ), + Field::make( 'text', 'hero_search_title', 'Заголовок формы поиска' ) + ->set_default_value( 'Найдите лагерь рядом с вами' ) + ->set_width( 50 ), + Field::make( 'text', 'hero_search_placeholder', 'Плейсхолдер поля поиска' ) + ->set_default_value( 'Ваш район или станция метро' ) + ->set_width( 50 ), + Field::make( 'image', 'hero_metric_1_img', 'Иконка метрики 1 (изображение)' ) + ->set_width( 30 ) + ->set_help_text( 'Рекомендуемый размер: 58x58 px. PNG/SVG.' ), + Field::make( 'text', 'hero_metric_1_number', 'Число метрики 1' ) + ->set_default_value( '90+' ) + ->set_width( 30 ), + Field::make( 'text', 'hero_metric_1_label', 'Подпись метрики 1' ) + ->set_default_value( 'Количество клубов' ) + ->set_width( 40 ), + Field::make( 'image', 'hero_metric_2_img', 'Иконка метрики 2 (изображение)' ) + ->set_width( 30 ) + ->set_help_text( 'Рекомендуемый размер: 58x58 px. PNG/SVG.' ), + Field::make( 'text', 'hero_metric_2_number', 'Число метрики 2' ) + ->set_default_value( '570K+' ) + ->set_width( 30 ), + Field::make( 'text', 'hero_metric_2_label', 'Подпись метрики 2' ) + ->set_default_value( 'Юных инноваторов' ) + ->set_width( 40 ), + Field::make( 'image', 'hero_metric_3_img', 'Иконка метрики 3 (изображение)' ) + ->set_width( 30 ) + ->set_help_text( 'Рекомендуемый размер: 58x58 px. PNG/SVG.' ), + Field::make( 'text', 'hero_metric_3_number', 'Число метрики 3' ) + ->set_default_value( '49K+' ) + ->set_width( 30 ), + Field::make( 'text', 'hero_metric_3_label', 'Подпись метрики 3' ) + ->set_default_value( 'Стипендий' ) + ->set_width( 40 ), )) - ->add_tab('Дополнительный баннер', array( - Field::make( 'image', 'banner_add_img', 'Фоновое изображение баннера' ), - Field::make( 'text', 'banner_add_title', 'Текст заголовка:' ), - Field::make( 'textarea', 'banner_add_text', 'Текст под заголовком:' ), - Field::make( 'text', 'banner_add_text_min', 'Сноска (под кнопкой):' ) - )) - ->add_tab('Дополнительный баннер-2', array( - Field::make( 'image', 'banner_add_img2', 'Фоновое изображение баннера' ), - Field::make( 'text', 'banner_add_title2', 'Текст заголовка:' ), - Field::make( 'textarea', 'banner_add_text2', 'Текст под заголовком:' ), - Field::make( 'text', 'banner_add_text_min2', 'Сноска (под кнопкой):' ) - )) - ->add_tab('Мы предлагаем', array( - Field::make( 'complex', 'suggestions', 'Блок "Что мы предлагаем"' ) + ->add_tab('💰 Программы и цены', array( + Field::make( 'separator', 'pricing_sep', 'Цены на пребывание' ), + Field::make( 'text', 'price_half_day', 'Стоимость за половину дня (в рублях)' ) + ->set_attribute( 'type', 'number' ) + ->set_width( 50 ) + ->set_help_text( 'Цена за 5 дней, например: 12900' ), + Field::make( 'text', 'price_full_day', 'Стоимость за полный день (в рублях)' ) + ->set_attribute( 'type', 'number' ) + ->set_width( 50 ) + ->set_help_text( 'Цена за 5 дней, например: 17900' ), + Field::make( 'separator', 'programs_sep', 'Тематические смены' ), + Field::make( 'complex', 'programs', 'Список программ (смен)' ) ->set_layout( 'tabbed-horizontal' ) + ->set_help_text( 'Добавьте каждую тематическую смену отдельной записью.' ) ->add_fields( array( - Field::make( 'image', 'suggestions_img', 'Изображение для баннера (десктопная версия)' ), - Field::make( 'text', 'suggestions_title', 'Текст заголовка:' ), - Field::make( 'textarea', 'suggestions_text', 'Текст под заголовком:' ) - )), - )) - ->add_tab('Программы', array( - Field::make( 'text', 'price_half_day', 'Стоимость за половину дня:' ) - ->set_attribute( 'type', 'number' ), - Field::make( 'text', 'price_full_day', 'Стоимость за весь день:' ) - ->set_attribute( 'type', 'number' ), - Field::make( 'complex', 'programs', 'Блок "Весенние и летние программы"' ) - ->set_layout( 'tabbed-horizontal' ) - ->add_fields( array( - Field::make( 'image', 'programs_img', 'Изображение для баннера (десктопная версия)' ), - Field::make( 'text', 'programs_title', 'Текст заголовка:' ), - Field::make( 'text', 'programs_date', 'Даты проведения:' ), - Field::make( 'textarea', 'programs_text', 'Описание в карточке:' ), - Field::make( 'text', 'programs_price', 'Стоимость:' ) + Field::make( 'image', 'programs_img', 'Изображение смены' ) + ->set_help_text( 'Рекомендуемый размер: 360×350 px.' ) + ->set_width( 100 ), + Field::make( 'text', 'programs_title', 'Название смены' ) + ->set_width( 50 ) + ->set_help_text( 'Например: «Космический десант»' ), + Field::make( 'text', 'programs_date', 'Даты проведения' ) + ->set_width( 50 ) + ->set_help_text( 'Например: «2–6 июня»' ), + Field::make( 'textarea', 'programs_text', 'Краткое описание (в карточке)' ) + ->set_width( 100 ) + ->set_help_text( '2–3 предложения.' ), + Field::make( 'text', 'programs_price', 'Стоимость (в рублях)' ) ->set_attribute( 'type', 'number' ) - ->set_width( 30 ), - Field::make( 'text', 'programs_days', 'Количество дней:' ) - ->set_width( 30 ), - Field::make( 'rich_text', 'programs_content', 'Описание для всплывающего окна:' ), + ->set_width( 50 ), + Field::make( 'text', 'programs_days', 'Количество дней' ) + ->set_width( 50 ) + ->set_help_text( 'Например: «5 дней» или «7 дней»' ), + Field::make( 'rich_text', 'programs_content', 'Полное описание (в модальном окне)' ) + ->set_width( 100 ) + ->set_help_text( 'Полный текст программы для всплывающего окна.' ), )), )) - ->add_tab('Наставники', array( - Field::make( 'complex', 'mentors', 'Наставники' ) + ->add_tab('👨‍🏫 Наставники', array( + Field::make( 'complex', 'mentors', 'Список наставников лагеря' ) ->set_layout( 'tabbed-horizontal' ) + ->set_help_text( 'Каждый наставник — отдельная запись. Не более 4 для одной страницы.' ) ->add_fields( array( - Field::make('association', 'mentor', 'Выберите наставника') + Field::make('association', 'mentor', 'Выберите наставника из списка') ->set_width( 32 ) ->set_types(array( array( @@ -602,39 +674,49 @@ function add_carbon() { ) )) ->set_max(1) - ->help_text( 'выбирается только один наставник для вкладки' ), - Field::make( 'text', 'mentor_job', 'Должность:' ), - Field::make( 'complex', 'mentor_directions', 'Направления наставника:' ) + ->set_help_text( 'Выберите одного преподавателя из записей типа «Учитель».' ), + Field::make( 'text', 'mentor_job', 'Должность в лагере' ) + ->set_width( 68 ), + Field::make( 'complex', 'mentor_directions', 'Направления работы' ) ->add_fields( array( - Field::make( 'text', 'direction_name', 'Название направления:' ), - )), - Field::make( 'text', 'mentor_experience', 'Опыт работы в сфере образования:' ), + Field::make( 'text', 'direction_name', 'Название направления' ), + )) + ->set_help_text( 'Например: «Робототехника», «Театр».' ), + Field::make( 'text', 'mentor_experience', 'Опыт работы (в годах)' ) + ->set_help_text( 'Текстом: «более 5 лет».' ), )) )) - ->add_tab('Распорядок дня', array( - Field::make( 'complex', 'routine', 'Блок "Распорядок дня"' ) + ->add_tab('⏰ Распорядок дня', array( + Field::make( 'complex', 'routine', 'Расписание по времени' ) + ->set_help_text( 'Добавьте пункты распорядка по порядку следования.' ) ->add_fields( array( - Field::make( 'text', 'routine_time', 'Время:' ) - ->set_width( 15 ), - Field::make( 'text', 'routine_title', 'Название мероприятия:' ) - ->set_width( 40 ), - Field::make( 'textarea', 'routine_text', 'Описание мероприятия:' ) + Field::make( 'text', 'routine_time', 'Время' ) + ->set_width( 15 ) + ->set_help_text( 'Формат: 08:30' ), + Field::make( 'text', 'routine_title', 'Название активности' ) + ->set_width( 40 ) + ->set_help_text( 'Например: «Научный блок»' ), + Field::make( 'textarea', 'routine_text', 'Описание' ) ->set_width( 45 ), )) )) - ->add_tab('Фотографии', array( - Field::make( 'complex', 'fotos', 'Блок с фотографиями' ) + ->add_tab('📷 Фотографии', array( + Field::make( 'complex', 'fotos', 'Галерея фотографий' ) ->set_layout( 'tabbed-horizontal' ) + ->set_help_text( 'Добавьте реальные фото детей из лагеря. Формат: WebP, 1:1 или 4:3.' ) ->add_fields( array( - Field::make( 'image', 'foto', 'Фотография:' ) + Field::make( 'image', 'foto', 'Фотография' ) )), - Field::make( 'rich_text', 'fotos_content', 'Текстовый контент:' ), - Field::make( 'text', 'fotos_link_vk', 'Ссылка на ВК:' ) + Field::make( 'separator', 'fotos_extra_sep', 'Дополнительно' ), + Field::make( 'rich_text', 'fotos_content', 'Текст под галереей' ), + Field::make( 'text', 'fotos_link_vk', 'Ссылка на альбом ВКонтакте' ) ->set_default_value('#') + ->set_help_text( 'Ссылка на альбом с большим количеством фото в сообществе.' ), )) - ->add_tab('Вопросы-Ответы', array( - Field::make( 'complex', 'questions', 'Блок вопросы и ответы' ) + ->add_tab('❓ Вопросы и ответы (FAQ)', array( + Field::make( 'complex', 'questions', 'Список вопросов и ответов' ) ->set_layout( 'tabbed-horizontal' ) + ->set_help_text( 'Чем больше вопросов, тем меньше возражений у родителей. Минимум 7–8 вопросов.' ) ->add_fields( array( Field::make( 'textarea', 'questions_question', 'Текст вопроса' ) ->set_width( 30 ), @@ -642,24 +724,70 @@ function add_carbon() { ->set_width( 70 ), )), )) - ->add_tab('Контакты', array( - Field::make( 'text', 'contact_address', 'Адрес:' ), - Field::make( 'text', 'contact_location', 'Координаты адреса (для яндекc карт):' ), - Field::make( 'text', 'contact_location_text', 'Название метки на карте' ), - Field::make( 'text', 'contact_tel', 'Телефон' ), - Field::make( 'text', 'contact_mail', 'Електронная почта:' ), - Field::make( 'complex', 'social_media', 'Социальная сеть' ) + ->add_tab('📍 Контакты и карта', array( + Field::make( 'separator', 'contacts_main_sep', 'Контактная информация' ), + Field::make( 'text', 'contact_tel', 'Телефон' ) + ->set_width( 50 ) + ->set_help_text( 'Формат: +7 (999) 123-45-67' ), + Field::make( 'text', 'contact_mail', 'Электронная почта' ) + ->set_width( 50 ), + Field::make( 'text', 'contact_address', 'Адрес проведения' ) + ->set_help_text( 'Полный адрес: город, улица, дом.' ), + Field::make( 'separator', 'contacts_map_sep', 'Карта и соцсети' ), + Field::make( 'text', 'contact_location', 'Координаты для Яндекс.Карт' ) + ->set_width( 50 ) + ->set_help_text( 'Формат: 55.9217, 37.9914' ), + Field::make( 'text', 'contact_location_text', 'Подпись метки на карте' ) + ->set_width( 50 ) + ->set_help_text( 'Что написано в баллуне на карте.' ), + Field::make( 'complex', 'social_media', 'Социальные сети и мессенджеры' ) ->add_fields( array( - Field::make( 'text', 'social_media_name', 'Название:' ) + Field::make( 'text', 'social_media_name', 'Название' ) ->set_width( 100 ), - Field::make( 'image', 'social_media_img', 'Логотип:' ) + Field::make( 'image', 'social_media_img', 'Иконка/логотип' ) ->set_width( 20 ), - Field::make( 'text', 'social_media_link', 'Cсылка:' ) + Field::make( 'text', 'social_media_link', 'Ссылка' ) ->set_width( 80 ), )), )) - ->add_tab('Битрикс', array( - Field::make( 'textarea', 'camp_bitrix_script', 'script (формы) БИТРИКС24:' ), + ->add_tab('🏭 Преимущества', array( + Field::make( 'complex', 'suggestions', 'Блок «Почему выбирают нас»' ) + ->set_layout( 'tabbed-horizontal' ) + ->set_help_text( '3–6 преимуществ с иконкой, заголовком и описанием.' ) + ->add_fields( array( + Field::make( 'image', 'suggestions_img', 'Изображение' ) + ->set_help_text( 'Рекомендуемый размер: 335×195 px.' ) + ->set_width( 100 ), + Field::make( 'text', 'suggestions_title', 'Заголовок' ) + ->set_width( 100 ), + Field::make( 'textarea', 'suggestions_text', 'Описание' ) + ->set_width( 100 ), + )), + )) + ->add_tab('🚩 Дополнительные баннеры', array( + Field::make( 'separator', 'banner1_sep', 'Баннер №1 (между программами и ценами)' ), + Field::make( 'image', 'banner_add_img', 'Фоновое изображение баннера №1' ) + ->set_width( 50 ) + ->set_help_text( 'Рекомендуемый размер: 1200×400 px.' ), + Field::make( 'text', 'banner_add_title', 'Заголовок баннера №1' ) + ->set_width( 50 ), + Field::make( 'textarea', 'banner_add_text', 'Текст баннера №1' ) + ->set_width( 100 ), + Field::make( 'text', 'banner_add_text_min', 'Сноска под кнопкой №1' ) + ->set_help_text( 'Маленький текст под кнопкой баннера.' ), + Field::make( 'separator', 'banner2_sep', 'Баннер №2 (после отзывов)' ), + Field::make( 'image', 'banner_add_img2', 'Фоновое изображение баннера №2' ) + ->set_width( 50 ), + Field::make( 'text', 'banner_add_title2', 'Заголовок баннера №2' ) + ->set_width( 50 ), + Field::make( 'textarea', 'banner_add_text2', 'Текст баннера №2' ) + ->set_width( 100 ), + Field::make( 'text', 'banner_add_text_min2', 'Сноска под кнопкой №2' ) + ->set_help_text( 'Маленький текст под кнопкой баннера.' ), + )) + ->add_tab('🗂️ Битрикс24', array( + Field::make( 'textarea', 'camp_bitrix_script', 'Скрипт формы Битрикс24' ) + ->set_help_text( 'Вставьте полный JS-код интеграции с CRM-формой Битрикс24. Выводится в модальном окне заявки.' ), )); } diff --git a/wp-content/themes/dekart/functions.php.bak.20260508_084227 b/wp-content/themes/dekart/functions.php.bak.20260508_084227 new file mode 100644 index 0000000..7eedcde --- /dev/null +++ b/wp-content/themes/dekart/functions.php.bak.20260508_084227 @@ -0,0 +1,965 @@ + _x( 'Категории курсов', 'taxonomy general name' ), + 'singular_name' => _x( 'Категория курсов', 'taxonomy singular name' ), + 'search_items' => __( 'Поиск курсов по категории' ), + 'all_items' => __( 'Все категории курсов' ), + 'parent_item' => __( 'Родительская категория курсов' ), + 'parent_item_colon' => __( 'Родителькая категория курсов:' ), + 'edit_item' => __( 'Редактировать категорию' ), + 'update_item' => __( 'Обновить категорию' ), + 'add_new_item' => __( 'Добавить новую категорию' ), + 'new_item_name' => __( 'Новая категория' ), + 'menu_name' => __( 'Категории курсов' ), + ); + register_taxonomy('courses', array('course'), array( + 'hierarchical' => true, + 'labels' => $labels, + 'show_ui' => true, + 'show_admin_column' => true, + 'query_var' => true, + 'rewrite' => array( 'slug' => 'courses' ), + )); +} +add_action( 'init', 'create_course' ); +function create_course() { + register_post_type( 'course', + array( + 'labels' => array( + 'name' => 'Курсы', + 'singular_name' => 'Курс', + 'add_new' => 'Добавить курс', + 'add_new_item' => 'Добавить курс', + 'edit' => 'Редактировать курс', + 'edit_item' => 'Редактировать курс', + 'new_item' => 'Новый курс', + 'view' => 'Смотреть курс', + 'view_item' => 'Смотреть курс', + 'search_items' => 'Поиск курсов', + 'not_found' => 'Курсы не найдены', + 'not_found_in_trash' => 'В корзине нет курсов', + 'parent' => 'Родительский курс' + ), + 'public' => true, + 'exclude_from_search'=> false, + 'menu_position' => 12, + 'supports' => array( 'title' ), + 'publicly_queryable' => true, + 'menu_icon' => 'dashicons-welcome-learn-more', + 'taxonomies' => array( 'courses' ), + 'has_archive' => false + ) + ); +} +/* --- ##Cources## --- */ + +/* --- trainingCategory --- */ +add_action( 'init', 'create_trainingCategory_hierarchical_taxonomy', 0 ); +function create_trainingCategory_hierarchical_taxonomy() { + $labels = array( + 'name' => _x( 'Категории', 'Категория обучения учителя' ), + 'singular_name' => _x( 'Категория', 'Категория' ), + 'search_items' => __( 'Поиск категории' ), + 'all_items' => __( 'Все категории' ), + 'parent_item' => __( 'Родительская категория' ), + 'parent_item_colon' => __( 'Родительская категория:' ), + 'edit_item' => __( 'Редактировать категорию' ), + 'update_item' => __( 'Обновить категорию' ), + 'add_new_item' => __( 'Добавить новую категорию' ), + 'new_item_name' => __( 'Новая категория' ), + 'menu_name' => __( 'Категории' ), + ); + register_taxonomy('trainingCategory', array('teacher'), array( + 'hierarchical' => true, + 'labels' => $labels, + 'show_ui' => true, + 'show_admin_column' => true, + 'query_var' => true, + 'rewrite' => false, // Отключаем перезапись URL + )); +} + +// ✅ Приоритет 5 — регистрация CPT teacher ДО инициализации Carbon Fields +add_action( 'init', 'create_teacher', 5 ); +function create_teacher() { + register_post_type( 'teacher', + array( + 'labels' => array( + 'name' => 'Преподаватели', + 'singular_name' => 'Преподаватель', + 'add_new' => 'Добавить преподавателя', + 'add_new_item' => 'Добавить преподавателя', + 'edit' => 'Редактировать преподавателя', + 'edit_item' => 'Редактировать преподавателя', + 'new_item' => 'Новый преподаватель', + 'view' => 'Смотреть преподавателя', + 'view_item' => 'Смотреть преподавателя', + 'search_items' => 'Поиск преподавателей', + 'not_found' => 'Преподаватели не найдены', + 'not_found_in_trash' => 'В корзине нет преподавателей', + 'parent' => 'Родительский преподаватель' + ), + 'public' => true, + 'exclude_from_search'=> false, + 'menu_position' => 12, + 'show_in_rest' => true, + 'supports' => array( 'title', 'thumbnail' ), + 'publicly_queryable' => true, + 'menu_icon' => 'dashicons-admin-users', + 'taxonomies' => array( 'subject' ), + 'has_archive' => false + ) + ); +} +/* --- ##Teacher## --- */ + +/* --- Reviews --- */ +add_action( 'init', 'create_reviews' ); +function create_reviews() { + register_post_type( 'reviews', + array( + 'labels' => array( + 'name' => 'Отзывы', + 'singular_name' => 'Отзыв', + 'add_new' => 'Добавить отзыв', + 'add_new_item' => 'Добавить отзыв', + 'edit' => 'Редактировать отзыв', + 'edit_item' => 'Редактировать отзыв', + 'new_item' => 'Новый отзыв', + 'view' => 'Смотреть отзыв', + 'view_item' => 'Смотреть отзыв', + 'search_items' => 'Поиск отзывов', + 'not_found' => 'Отзывы не найдены', + 'not_found_in_trash' => 'В корзине нет отзывов', + 'parent' => 'Родительский отзыв' + ), + 'public' => true, + 'exclude_from_search'=> true, + 'menu_position' => 13, + 'supports' => array( 'title' ), + 'publicly_queryable' => false, + 'menu_icon' => 'dashicons-format-status', + 'has_archive' => false + ) + ); +} + +use Carbon_Fields\Container; +use Carbon_Fields\Field; + +add_action( 'carbon_fields_register_fields', 'add_carbon' ); +function add_carbon() { + + // ==================================================== + // Настройки темы + // ==================================================== + Container::make( 'theme_options', 'Настройка темы ДЕКАРТ' ) + ->add_tab('Основные', array( + Field::make( 'text', 'site_name', 'Название учебного центра: (используйте в названии только одинарный кавычки)' ), + Field::make( 'text', 'site_phone', 'Телефон:' ), + Field::make( 'text', 'site_phone_multi', 'Телефон (многоканальный):' ), + Field::make( 'text', 'site_mail', 'Почта для связи:' ), + Field::make( 'text', 'site_index', 'Почтовый индекс:' ), + Field::make( 'text', 'site_region', 'Область:' ), + Field::make( 'text', 'site_city', 'Город:' ), + Field::make( 'text', 'site_address', 'Адрес:' ), + Field::make( 'text', 'site_map_link', 'Ссылка на карту:' ), + Field::make( 'text', 'site_location', 'Координаты адреса (для яндекc карт):' ), + Field::make( 'text', 'site_frame_reviews', 'Ссылка на страницу с отзывами:' ), + Field::make( 'textarea', 'site_bitrix_script', 'script (формы) БИТРИКС24:' ), + Field::make( 'textarea', 'site_bitrix_vacancies', 'script (для формы связаться с нами) БИТРИКС24:' ), + Field::make( 'checkbox', 'check_banner', 'Отображать плашку со скидкой на формах "Запись на бесплатное пробное занятие"' ) + ->set_option_value( 'yes' ), + Field::make( 'checkbox', 'check_btn_discont', 'Не показывать кнопку "Стоимость ак. часа со скидкой"' ) + ->set_option_value( 'yes' ), + Field::make( 'text', 'text_banner', 'Текст в плашке:' ) + ->set_default_value('Всем записавшимся до 10 сентября
скидка 10% на весь учебный год!'), + )) + ->add_tab('Контент', array( + Field::make( 'textarea', 'teachers_block', 'Текст в блоке "Наша команда":' ), + )) + ->add_tab('Цены и скидки', array( + Field::make( 'checkbox', 'early_bird_discount', 'Выводить строку "Скидка за раннюю запись.' ) + ->set_option_value( 'yes' ), + Field::make( 'text', 'price_hour1', 'Стоимость ак. часа один предмет:' ) + ->set_attribute( 'type', 'number' ), + Field::make( 'text', 'price_hour2', 'Стоимость ак. часа два предмета:' ) + ->set_attribute( 'type', 'number' ), + Field::make( 'text', 'price_hour3', 'Стоимость ак. часа три предмета:' ) + ->set_attribute( 'type', 'number' ), + Field::make( 'text', 'price_hour4', 'Стоимость ак. часа четыре и более предметов:' ) + ->set_attribute( 'type', 'number' ), + Field::make( 'text', 'price_hour_discount1', 'Стоимость ак. часа один предмет со скидкой:' ) + ->set_attribute( 'type', 'number' ), + Field::make( 'text', 'price_hour_discount2', 'Стоимость ак. часа два предмета со скидкой:' ) + ->set_attribute( 'type', 'number' ), + Field::make( 'text', 'price_hour_discount3', 'Стоимость ак. часа три предмета со скидкой:' ) + ->set_attribute( 'type', 'number' ), + Field::make( 'text', 'price_hour_discount4', 'Стоимость ак. часа четыре и более предметов со скидкой:' ) + ->set_attribute( 'type', 'number' ), + )) + ->add_tab('Социальные сети:', array( + Field::make( 'text', 'social_header_wt', 'ссылка на WhatsApp в шапке сайта' ), + Field::make( 'text', 'social_wt', 'ссылка на WhatsApp на странице "Контакты"' ), + Field::make( 'complex', 'social_media', 'Социальная сеть' ) + ->add_fields( array( + Field::make( 'text', 'social_media_name', 'Название:' ) + ->set_width( 100 ), + Field::make( 'image', 'social_media_img', 'Логотип:' ) + ->set_width( 20 ), + Field::make( 'text', 'social_media_link', 'Cсылка:' ) + ->set_width( 80 ), + )), + )) + ->add_tab('Галерея', array( + Field::make( 'complex', 'slider_img', 'Галерея изображений учебного центра' ) + ->set_layout( 'tabbed-horizontal' ) + ->add_fields( array( + Field::make( 'image', 'img', 'Фотография:' ), + )), + )); + + // ==================================================== + // Доп поля для всех страниц + // ==================================================== + Container::make('post_meta', 'Дополнительные поля') + ->where('post_type', '=', 'page') + ->where('post_id', '!=', 64) + ->add_fields(array( + Field::make( 'image', 'banner_img_desktop', 'Изображение для баннера (десктопная версия)' ) + ->help_text( 'Размер изображения (желательно) 1295px на 454px' ) + ->set_width( 15 ), + Field::make( 'image', 'banner_img_mobile', 'Изображение для баннера (мобильная версия)' ) + ->help_text( 'Размер изображения (желательно) 450px на 225px' ) + ->set_width( 15 ), + Field::make( 'text', 'banner_h1', 'текст для H1' ) + ->set_width( 100 ), + Field::make( 'text', 'banner_text', 'Дополнительный текст под H1' ) + ->set_width( 100 ), + Field::make( 'complex', 'page_breadcrumbs', 'Хлебные крошки' ) + ->set_layout( 'tabbed-horizontal' ) + ->add_fields( array( + Field::make( 'text', 'breadcrumbs_name', 'Название крошки:' ) + ->set_width( 50 ), + Field::make( 'text', 'breadcrumbs_link', 'Ссылка крошки:' ) + ->set_width( 50 ) + ->set_default_value('#'), + )), + )); + + // ==================================================== + // Доп поля для категории Курсов + // ==================================================== + Container::make( 'term_meta', 'Дополнительные поля к Курсам' ) + ->where( 'term_taxonomy', '=', 'courses' ) + ->show_on_level(1) + ->where( 'term_level', '=', 1 ) + ->add_fields( array( + Field::make( 'image', 'snippet', 'Изображение для сниппета:' ) + ->set_width( 100 ), + Field::make( 'image', 'banner_img_desktop', 'Изображение для баннера (десктопная версия)' ) + ->help_text( 'Размер изображения (желательно) 1920px на 1030px' ) + ->set_width( 15 ), + Field::make( 'image', 'banner_img_mobile', 'Изображение для баннера (мобильная версия)' ) + ->help_text( 'Размер изображения (желательно) 390px на 550px' ) + ->set_width( 15 ), + Field::make( 'textarea', 'banner_content', 'Текстовый контент баннера' ) + ->set_width( 70 ), + Field::make( 'text', 'title_product', 'Заголовок блока курсов:' ) + ->set_width( 100 ), + )); + + // ==================================================== + // Уникальное имя контейнера Главной Страницы + // ==================================================== + Container::make('post_meta', 'Настройки Главной Страницы') + ->where('post_template', '=', 'front-page.php') + ->add_fields(array( + Field::make( 'textarea', 'block_text_1', 'Текст для блока Частная школа в Щелково "Декарт"' ), + Field::make( 'image', 'main_banner_img_desktop', 'Изображение рекламного баннера (десктопная версия)' ) + ->help_text( 'Размер изображения (желательно) 1185px на 190px' ) + ->set_width( 15 ), + Field::make( 'image', 'main_banner_img_mobile', 'Изображение рекламного баннера (мобильная версия)' ) + ->help_text( 'Размер изображения (желательно) 390px на 550px' ) + ->set_width( 15 ), + Field::make( 'text', 'main_banner_link', 'УРЛ баннера:' ) + ->set_default_value('#'), + )); + + // ==================================================== + // Доп поля для страницы начальной школы + // ==================================================== + Container::make('post_meta', 'Настройки Начальной Школы') + ->where('post_template', '=', 'page-school.php') + ->add_fields(array( + Field::make( 'textarea', 'teachers_block', 'Текст в блоке "Наша команда":' ), + Field::make( 'image', 'main_banner_img_desktop', 'Изображение рекламного баннера (десктопная версия)' ) + ->help_text( 'Размер изображения (желательно) 1185px на 190px' ) + ->set_width( 15 ), + Field::make( 'image', 'main_banner_img_mobile', 'Изображение рекламного баннера (мобильная версия)' ) + ->help_text( 'Размер изображения (желательно) 390px на 550px' ) + ->set_width( 15 ), + Field::make( 'text', 'main_banner_link', 'УРЛ баннера:' ) + ->set_default_value('#'), + Field::make( 'textarea', 'block_text_1', 'Текст для блока "Персональный план развития для каждого ученика"' ), + Field::make( 'textarea', 'block_text_2', 'Текст для блока - Почему начальная частная школа "Декарт", ‌а не государственная?' ), + Field::make( 'textarea', 'block_text_3', 'Текст для блока "Семейные классы в Щелково"' ), + Field::make( 'complex', 'questions', 'Блок вопросы и ответы' ) + ->set_layout( 'tabbed-horizontal' ) + ->add_fields( array( + Field::make( 'textarea', 'questions_question', 'Текст вопроса' ) + ->set_width( 30 ), + Field::make( 'textarea', 'questions_answer', 'Текст ответа' ) + ->set_width( 70 ), + )), + )); + + // ==================================================== + // Доп поля для страницы "ВСЕ КУРСЫ" + // ==================================================== + Container::make('post_meta', 'Настройки Страницы Все Курсы') + ->where('post_template', '=', 'page-course.php') + ->add_fields(array( + Field::make( 'image', 'banner_img_desktop', 'Изображение для баннера (десктопная версия)' ) + ->help_text( 'Размер изображения (желательно) 1920px на 440px' ) + ->set_width( 15 ), + Field::make( 'image', 'banner_img_mobile', 'Изображение для баннера (мобильная версия)' ) + ->help_text( 'Размер изображения (желательно) 450px на 225px' ) + ->set_width( 15 ), + )); + + // ==================================================== + // Доп поля для страницы "ВАКАНСИИ" + // ==================================================== + Container::make('post_meta', 'Настройки Страницы ВАКАНСИИ') + ->where('post_template', '=', 'page-vacancies.php') + ->add_fields(array( + Field::make( 'complex', 'vacancies', 'Вакансии учебного центра:' ) + ->add_fields( array( + Field::make( 'text', 'vacancie_name', 'Название вакансии:' ), + Field::make( 'text', 'vacancie_link', 'Ссылка на страницу вакансии:' ), + )) + )); + + // ==================================================== + // Доп поля для страницы "КОНТАКТЫ" + // ==================================================== + Container::make('post_meta', 'Настройки Страницы Контакты') + ->where('post_template', '=', 'page-contacts.php') + ->add_fields(array( + Field::make( 'image', 'img_school', 'Изображение школы:' ) + )); + + // ==================================================== + // Доп поля для категории (ПРЕДМЕТ) + // ==================================================== + Container::make('term_meta', 'Category Properties') + ->where('term_taxonomy', '=', 'subject') + ->show_on_level(1) + ->where('term_level', '=', 1) + ->add_fields(array( + Field::make('text', 'subject_h1', 'Заголовок H1:') + ->set_width( 100 ) + )); + + // ==================================================== + // Доп поля для сущностей reviews (ОТЗЫВ) + // ==================================================== + Container::make('post_meta', 'Поля для отзыва') + ->where('post_type', '=', 'reviews') + ->add_fields(array( + Field::make( 'radio', 'review_type', 'Тип отзыва' ) + ->set_options( [ + 'camp' => 'О лагере', + 'school' => 'О школе', + 'primary' => 'О начальной школе', + ] ) + ->set_default_value( 'school' ) + ->set_help_text( 'Выберите тип отзыва' ), + Field::make( 'image', 'review_avatar', 'Автар:' ) + ->set_width( 15 ), + Field::make( 'text', 'review_star', 'Оценка:' ) + ->set_attribute( 'type', 'number' ), + Field::make( 'textarea', 'review_text', 'Текст отзыва:' ) + ->set_width( 100 ), + Field::make('association', 'review_teacher', 'Выберите преподавателя:') + ->set_width( 32 ) + ->set_types(array( + array( + 'type' => 'post', + 'post_type' => 'teacher', + ) + )) + ->set_required(true) + ->set_max(1) + ->help_text( 'выбирается только один' ), + )); + + // ==================================================== + // Доп поля для записей teacher + // ==================================================== + Container::make( 'post_meta', 'Поля для преподавателя' ) + ->where( 'post_type', '=', 'teacher' ) + ->add_fields( array( + Field::make( 'text', 'teacher_direction', 'Направление преподавателя (текст в под фото):' ), + Field::make( 'image', 'teacher_avatar', 'Автар:' ) + ->set_width( 15 ), + Field::make( 'textarea', 'teacher_description', 'Дескрипшн преподавателя' ) + ->set_width( 75 ), + Field::make( 'textarea', 'teacher_about', 'О себе:' ), + Field::make( 'textarea', 'teacher_education', 'Образование:' ), + Field::make( 'textarea', 'teacher_add_education', 'Дополнительное образование:' ), + Field::make( 'text', 'teacher_rating', 'Оценка преподавателя' ) + ->set_width( 10 ) + ->set_default_value('5'), + Field::make( 'complex', 'teacher_subjects', 'Предметы обучения' ) + ->set_layout( 'tabbed-horizontal' ) + ->add_fields( array( + Field::make( 'text', 'teacher_subjects_title', 'Укажите заголовок предмета' ) + ->set_width( 50 ) + ->set_required(true) + ->help_text( 'Например: Репетитор по математике' ), + Field::make( 'textarea', 'select_direction', 'Укажите все направления преподавателя:' ) + ->help_text( 'Пример: <span>Математика</span><span>Русский язык</span>'), + Field::make('association', 'select_category', 'Укажите категрии') + ->set_width( 100 ) + ->set_types(array( + array( + 'type' => 'term', + 'taxonomy' => 'trainingCategory', + ) + )) + ->help_text( 'В списке указаны все возможные категрии в обучении, выберите необходимые' ), + )), + Field::make( 'complex', 'certificates', 'Дипломы и сертификаты' ) + ->set_layout( 'tabbed-horizontal' ) + ->add_fields( array( + Field::make( 'image', 'certificates_foto', 'Изображение' ) + )) + ->help_text( 'Добавьте изображение дипломов и сертификатов преподавателя' ), + Field::make( 'text', 'teacher_video', 'Ссылка на видеопрезентацию' ) + ->set_width( 100 ) + ->help_text( 'Укажите ссылку на видео в youtube. Пример: <iframe src="https://vk.com/video_ext.php?oid=-43228812&id=456240170hd=2" width="853" height="480" allow="autoplay; encrypted-media; fullscreen; picture-in-picture;" frameborder="0" allowfullscreen></iframe>' ), + Field::make( 'complex', 'questions', 'Блок вопросы и ответы' ) + ->set_layout( 'tabbed-horizontal' ) + ->add_fields( array( + Field::make( 'textarea', 'questions_question', 'Текст вопроса' ) + ->set_width( 30 ), + Field::make( 'textarea', 'questions_answer', 'Текст ответа' ) + ->set_width( 70 ), + )), + )); + + // ==================================================== + // Уникальное имя контейнера Продлёнки + // ==================================================== + Container::make('post_meta', 'Настройки Продлёнки') + ->where('post_template', '=', 'page-after-school.php') + ->add_tab('Общие', array( + Field::make( 'text', 'as_address', 'Наш адрес:' ), + Field::make( 'text', 'as_price', 'Цена:' ), + )) + ->add_tab('Педагоги', array( + Field::make( 'complex', 'as_mentors', 'Педагоги' ) + ->set_layout( 'tabbed-horizontal' ) + ->add_fields( array( + Field::make( 'image', 'mentor_foto', 'Фотография:' ) + ->set_width( 15 ), + Field::make( 'text', 'mentor_name', 'ФИО:' ) + ->set_width( 30 ), + Field::make( 'text', 'mentor_directions', 'Описание:' ) + ->set_width( 55 ), + )) + )) + ->add_tab('Распорядок дня', array( + Field::make( 'textarea', 'as_routine', 'Блок "Распорядок дня":' ), + )) + ->add_tab('Отзывы', array( + Field::make( 'complex', 'as_reviews', 'Отзывы клиентов:' ) + ->set_layout( 'tabbed-horizontal' ) + ->add_fields( array( + Field::make( 'image', 'review_avatar', 'Автар:' ) + ->set_width( 15 ), + Field::make( 'text', 'review_name', 'Имя:' ) + ->set_width( 30 ), + Field::make( 'text', 'review_star', 'Оценка:' ) + ->set_width( 15 ) + ->set_attribute( 'type', 'number' ), + Field::make( 'textarea', 'review_text', 'Текст отзыва:' ) + ->set_width( 100 ), + )), + )) + ->add_tab('Вопросы-Ответы', array( + Field::make( 'complex', 'as_questions', 'Блок вопросы и ответы' ) + ->set_layout( 'tabbed-horizontal' ) + ->add_fields( array( + Field::make( 'textarea', 'questions_question', 'Текст вопроса' ) + ->set_width( 30 ), + Field::make( 'textarea', 'questions_answer', 'Текст ответа' ) + ->set_width( 70 ), + )), + )) + ->add_tab('Фото', array( + Field::make( 'complex', 'as_fotos', 'Фотографии:' ) + ->set_layout( 'tabbed-horizontal' ) + ->add_fields( array( + Field::make( 'image', 'foto', 'Фото' ) + )), + )) + ->add_tab('Битрикс', array( + Field::make( 'textarea', 'as_bitrix_script', 'script (формы) БИТРИКС24:' ), + )); + + // ==================================================== + // Доп поля для страницы "ГОРОДСКОЙ ЛАГЕРЬ" + // ==================================================== + Container::make('post_meta', 'Настройки Городской Лагерь') + ->where('post_template', '=', 'page-camp.php') + ->add_tab('Hero (новый дизайн)', array( + Field::make( 'image', 'banner_img', 'Фото в Hero-секции (главное изображение):' ) + ->set_help_text( 'Рекомендуемый размер: 840×560 px, WebP. Будет автоматически обрезано до 840px.' ), + Field::make( 'image', 'hero_img_mobile', 'Фото Hero для мобильных (опционально):' ) + ->set_help_text( 'Рекомендуемый размер: 480×320 px, WebP. Если не заполнено — используется главное фото.' ), + Field::make( 'text', 'hero_title_h1', 'Заголовок H1 (первая часть):' ) + ->set_default_value( 'Mind-Blowing Innovation.' ), + Field::make( 'text', 'hero_title_span', 'Заголовок span (вторая часть, цветная):' ) + ->set_default_value( 'Big Summer Fun!' ), + Field::make( 'textarea', 'banner_text', 'Текст под заголовком:' ) + ->set_default_value( 'Городской лагерь для детей 7–14 лет: наука, творчество и настоящие приключения каждый день' ), + Field::make( 'separator', 'hero_cta_sep', 'Кнопки' ), + Field::make( 'text', 'hero_btn_primary', 'Текст главной кнопки:' ) + ->set_default_value( 'Записаться на пробный день' ), + Field::make( 'text', 'hero_btn_secondary', 'Текст второй кнопки:' ) + ->set_default_value( 'Посмотреть программу' ), + Field::make( 'text', 'hero_btn_primary_link', 'Ссылка с главной кнопки (ID смены или URL):' ) + ->set_default_value( '#programs' ), + Field::make( 'text', 'hero_btn_secondary_link', 'Ссылка с второй кнопки:' ) + ->set_default_value( '#programs' ), + Field::make( 'separator', 'hero_search_sep', 'Форма поиска лагеря' ), + Field::make( 'text', 'hero_search_title', 'Заголовок формы поиска:' ) + ->set_default_value( 'Find the Camp Galileo Closest to You' ), + Field::make( 'text', 'hero_search_placeholder', 'Плейсхолдер поля поиска:' ) + ->set_default_value( 'Search by Zip Code' ), + Field::make( 'separator', 'hero_metrics_sep', 'Метрики доверия' ), + Field::make( 'text', 'hero_metric_1_icon', 'Иконка метрики 1 (emoji):' ) + ->set_default_value( '🏆' ), + Field::make( 'text', 'hero_metric_1_text', 'Текст метрики 1:' ) + ->set_default_value( '12 лет в городе' ), + Field::make( 'text', 'hero_metric_2_icon', 'Иконка метрики 2 (emoji):' ) + ->set_default_value( '👶' ), + Field::make( 'text', 'hero_metric_2_text', 'Текст метрики 2:' ) + ->set_default_value( '2 500+ счастливых детей' ), + Field::make( 'text', 'hero_metric_3_icon', 'Иконка метрики 3 (emoji):' ) + ->set_default_value( '⭐' ), + Field::make( 'text', 'hero_metric_3_text', 'Текст метрики 3:' ) + ->set_default_value( '4.9 / 5 — рейтинг от родителей' ), + )) + ->add_tab('Дополнительный баннер', array( + Field::make( 'image', 'banner_add_img', 'Фоновое изображение баннера' ), + Field::make( 'text', 'banner_add_title', 'Текст заголовка:' ), + Field::make( 'textarea', 'banner_add_text', 'Текст под заголовком:' ), + Field::make( 'text', 'banner_add_text_min', 'Сноска (под кнопкой):' ) + )) + ->add_tab('Дополнительный баннер-2', array( + Field::make( 'image', 'banner_add_img2', 'Фоновое изображение баннера' ), + Field::make( 'text', 'banner_add_title2', 'Текст заголовка:' ), + Field::make( 'textarea', 'banner_add_text2', 'Текст под заголовком:' ), + Field::make( 'text', 'banner_add_text_min2', 'Сноска (под кнопкой):' ) + )) + ->add_tab('Мы предлагаем', array( + Field::make( 'complex', 'suggestions', 'Блок "Что мы предлагаем"' ) + ->set_layout( 'tabbed-horizontal' ) + ->add_fields( array( + Field::make( 'image', 'suggestions_img', 'Изображение для баннера (десктопная версия)' ), + Field::make( 'text', 'suggestions_title', 'Текст заголовка:' ), + Field::make( 'textarea', 'suggestions_text', 'Текст под заголовком:' ) + )), + )) + ->add_tab('Программы', array( + Field::make( 'text', 'price_half_day', 'Стоимость за половину дня:' ) + ->set_attribute( 'type', 'number' ), + Field::make( 'text', 'price_full_day', 'Стоимость за весь день:' ) + ->set_attribute( 'type', 'number' ), + Field::make( 'complex', 'programs', 'Блок "Весенние и летние программы"' ) + ->set_layout( 'tabbed-horizontal' ) + ->add_fields( array( + Field::make( 'image', 'programs_img', 'Изображение для баннера (десктопная версия)' ), + Field::make( 'text', 'programs_title', 'Текст заголовка:' ), + Field::make( 'text', 'programs_date', 'Даты проведения:' ), + Field::make( 'textarea', 'programs_text', 'Описание в карточке:' ), + Field::make( 'text', 'programs_price', 'Стоимость:' ) + ->set_attribute( 'type', 'number' ) + ->set_width( 30 ), + Field::make( 'text', 'programs_days', 'Количество дней:' ) + ->set_width( 30 ), + Field::make( 'rich_text', 'programs_content', 'Описание для всплывающего окна:' ), + )), + )) + ->add_tab('Наставники', array( + Field::make( 'complex', 'mentors', 'Наставники' ) + ->set_layout( 'tabbed-horizontal' ) + ->add_fields( array( + Field::make('association', 'mentor', 'Выберите наставника') + ->set_width( 32 ) + ->set_types(array( + array( + 'type' => 'post', + 'post_type' => 'teacher', + ) + )) + ->set_max(1) + ->help_text( 'выбирается только один наставник для вкладки' ), + Field::make( 'text', 'mentor_job', 'Должность:' ), + Field::make( 'complex', 'mentor_directions', 'Направления наставника:' ) + ->add_fields( array( + Field::make( 'text', 'direction_name', 'Название направления:' ), + )), + Field::make( 'text', 'mentor_experience', 'Опыт работы в сфере образования:' ), + )) + )) + ->add_tab('Распорядок дня', array( + Field::make( 'complex', 'routine', 'Блок "Распорядок дня"' ) + ->add_fields( array( + Field::make( 'text', 'routine_time', 'Время:' ) + ->set_width( 15 ), + Field::make( 'text', 'routine_title', 'Название мероприятия:' ) + ->set_width( 40 ), + Field::make( 'textarea', 'routine_text', 'Описание мероприятия:' ) + ->set_width( 45 ), + )) + )) + ->add_tab('Фотографии', array( + Field::make( 'complex', 'fotos', 'Блок с фотографиями' ) + ->set_layout( 'tabbed-horizontal' ) + ->add_fields( array( + Field::make( 'image', 'foto', 'Фотография:' ) + )), + Field::make( 'rich_text', 'fotos_content', 'Текстовый контент:' ), + Field::make( 'text', 'fotos_link_vk', 'Ссылка на ВК:' ) + ->set_default_value('#') + )) + ->add_tab('Вопросы-Ответы', array( + Field::make( 'complex', 'questions', 'Блок вопросы и ответы' ) + ->set_layout( 'tabbed-horizontal' ) + ->add_fields( array( + Field::make( 'textarea', 'questions_question', 'Текст вопроса' ) + ->set_width( 30 ), + Field::make( 'textarea', 'questions_answer', 'Текст ответа' ) + ->set_width( 70 ), + )), + )) + ->add_tab('Контакты', array( + Field::make( 'text', 'contact_address', 'Адрес:' ), + Field::make( 'text', 'contact_location', 'Координаты адреса (для яндекc карт):' ), + Field::make( 'text', 'contact_location_text', 'Название метки на карте' ), + Field::make( 'text', 'contact_tel', 'Телефон' ), + Field::make( 'text', 'contact_mail', 'Електронная почта:' ), + Field::make( 'complex', 'social_media', 'Социальная сеть' ) + ->add_fields( array( + Field::make( 'text', 'social_media_name', 'Название:' ) + ->set_width( 100 ), + Field::make( 'image', 'social_media_img', 'Логотип:' ) + ->set_width( 20 ), + Field::make( 'text', 'social_media_link', 'Cсылка:' ) + ->set_width( 80 ), + )), + )) + ->add_tab('Битрикс', array( + Field::make( 'textarea', 'camp_bitrix_script', 'script (формы) БИТРИКС24:' ), + )); +} + +// функция получения id курса по его названию +function get_post_by_title($page_title) { + $query = new WP_Query( + [ + 'post_type' => 'course', + 'title' => $page_title, + 'post_status' => 'publish', + 'posts_per_page' => 1, + 'update_post_term_cache' => false, + 'update_post_meta_cache' => false, + 'orderby' => 'post_date ID', + 'order' => 'ASC', + 'no_found_rows' => true, + 'ignore_sticky_posts' => true, + ]); + wp_reset_postdata(); + if ( $query->post ) return $query->post->ID; + else return null; +} + +// функция случайного цвета +function rand_color() { + return sprintf('#%06X', mt_rand(0, 0xFFFFFF)); +} + +add_theme_support( 'post-thumbnails' ); + +add_action('pre_get_posts', 'exclude_custom_taxonomy_posts'); +function exclude_custom_taxonomy_posts($query) { + if (!is_admin() && $query->is_main_query() && ($query->is_tax('trainingCategory') || $query->is_tax('direction'))) { + $query->set_404(); + } +} + +function add_og_image() { + $term = get_queried_object(); + if ($term->term_id) { + $snippet = carbon_get_term_meta( $term->term_id, 'snippet' ); + if ($snippet != '') echo '' . "\n"; + } +} +add_action( 'wp_head', 'add_og_image' ); + +function yoastVariableToTitle($post_id) { + $yoast_title = get_post_meta($post_id, '_yoast_wpseo_title', true); + $title = strstr($yoast_title, '%%', true); + if (empty($title)) { + $title = get_the_title($post_id); + } + $wpseo_titles = get_option('wpseo_titles'); + $sep_options = WPSEO_Option_Titles::get_instance()->get_separator_options(); + if (isset($wpseo_titles['separator']) && isset($sep_options[$wpseo_titles['separator']])) { + $sep = $sep_options[$wpseo_titles['separator']]; + } else { + $sep = '-'; + } + $site_title = get_bloginfo('name'); + $meta_title = $title . ' ' . $sep . ' ' . $site_title; + return $meta_title; +} + +function replaceQuotes($text) { + $text = str_replace(['"'], "'", $text); + return $text; +} + +function enqueue_template_specific_styles() { + if ( is_page_template('page-camp.php') ) { + wp_enqueue_style( + 'template-specific-style', + get_template_directory_uri() . '/assets/css/camp.css', + array(), + '1.0' + ); + wp_enqueue_script( + 'camp-script', + get_template_directory_uri() . '/assets/js/camp.js', + NULL, + '1.0.0', + true + ); + } + if ( is_page_template('page-after-school.php') ) { + wp_enqueue_style( + 'template-after-style', + get_template_directory_uri() . '/assets/css/after-school.css', + array(), + '1.0' + ); + } +} +add_action('wp_enqueue_scripts', 'enqueue_template_specific_styles'); + +add_shortcode( 'get_form_bitrix', 'form_bitrix' ); +function form_bitrix( $atts, $content = null ) { + return carbon_get_theme_option( 'site_bitrix_script' ); +} + +add_shortcode( 'get_reviews', 'sc_reviews' ); +function sc_reviews( $atts ) { + $atts = shortcode_atts( [ + 'type' => 'school', + ], $atts ); + set_query_var( 'type', $atts['type'] ); + ob_start(); + load_template( locate_template( '/template-parts/reviews.php' ), false ); + return ob_get_clean(); +} + +add_shortcode( 'get_teachers', 'sc_teachers' ); +function sc_teachers( $atts, $content = null ) { + ob_start(); + set_query_var( 'sc_teachers', '1' ); + load_template( locate_template( '/template-parts/teachers.php' ), false ); + return ob_get_clean(); +} + +function fix_page_1_in_pagination( $link ) { + $reviews_page_id = 91; + $root_url = get_permalink( $reviews_page_id ); + if ( substr( $root_url, -1 ) !== '/' ) { + $root_url .= '/'; + } + if ( isset($_GET['filter']) ) { + $root_url = add_query_arg('filter', esc_attr($_GET['filter']), $root_url); + } + $page_1_url_full = get_pagenum_link(1); + if (substr($page_1_url_full, -1) !== '/') { + $page_1_url_full .= '/'; + } + $canonical_root_url = get_permalink($reviews_page_id); + if (substr($canonical_root_url, -1) !== '/') { + $canonical_root_url .= '/'; + } + if (isset($_GET['filter'])) { + $canonical_root_url = add_query_arg('filter', esc_attr($_GET['filter']), $canonical_root_url); + } + $link = str_replace( + 'href="' . esc_url($page_1_url_full) . '"', + 'href="' . esc_url($canonical_root_url) . '"', + $link + ); + $link = str_replace( + 'href="' . esc_url(get_pagenum_link(1)) . '"', + 'href="' . esc_url($canonical_root_url) . '"', + $link + ); + return $link; +} +add_filter( 'paginate_links', 'fix_page_1_in_pagination' ); + +remove_action('wp_head', 'wp_generator'); +remove_action('wp_head', 'rest_output_link_wp_head'); +remove_action('wp_head', 'wp_oembed_add_discovery_links'); +remove_action('wp_head', 'wp_shortlink_wp_head'); +remove_action('wp_head', 'adjacent_posts_rel_link_wp_head'); +remove_action('template_redirect', 'rest_output_link_header', 11); + +function dekart_disable_emojis() { + remove_action('wp_head', 'print_emoji_detection_script', 7); + remove_action('admin_print_scripts', 'print_emoji_detection_script'); + remove_action('wp_print_styles', 'print_emoji_styles'); + remove_action('admin_print_styles', 'print_emoji_styles'); + remove_filter('the_content_feed', 'wp_staticize_emoji'); + remove_filter('comment_text_rss', 'wp_staticize_emoji'); + remove_filter('wp_mail', 'wp_staticize_emoji_for_email'); + add_filter('tiny_mce_plugins', 'dekart_disable_emojis_tinymce'); + add_filter('wp_resource_hints', 'dekart_disable_emojis_remove_dns_prefetch', 10, 2); +} +add_action('init', 'dekart_disable_emojis'); + +function dekart_disable_emojis_tinymce($plugins) { + if (is_array($plugins)) { + return array_diff($plugins, array('wpemoji')); + } + return array(); +} + +function dekart_disable_emojis_remove_dns_prefetch($urls, $relation_type) { + if ('dns-prefetch' === $relation_type) { + $emoji_svg_url = apply_filters('emoji_svg_url', 'https://s.w.org/images/core/emoji/'); + $urls = array_diff($urls, array($emoji_svg_url)); + } + return $urls; +} + +// ==================================================== +// ✅ Оптимизация скриптов — defer только на фронтенде +// ==================================================== +function dekart_add_defer_to_scripts($tag, $handle, $src) { + // Не деферим скрипты в админке, AJAX и REST запросах + if ( is_admin() || wp_doing_ajax() || ( defined('REST_REQUEST') && REST_REQUEST ) ) { + return $tag; + } + $no_defer = array( + 'jquery-core', + 'jquery', + 'carbon-fields-script', + 'wp-api-request', + 'wp-element', + 'wp-components', + ); + if (in_array($handle, $no_defer)) { + return $tag; + } + if (strpos($tag, 'defer') !== false || strpos($tag, 'async') !== false) { + return $tag; + } + return str_replace(' - -
- - - -
-

Что мы предлагаем

-
- -
- <?php echo get_post_meta( $suggestions_img, '_wp_attachment_image_alt', true ); ?> -

-

-
- -
-
-

С любовью и заботой о каждом

-

Мы обеспечиваем безопасную и поддерживающую среду, где дети могут раскрывать свой - потенциал, исследовать мир и развивать дружбу под присмотром заботливых наставников.

-
-
- инфографика возраста -

возраст

-

6,5−11 лет

-
-
- инфографика группы -

каждая группа

-

до 10 детей

-
-
- инфографика времени -

время посещения

-

на выбор

-
-
- инфографика стоимости -

стоимость недели

-

от

-
-
-
- -
-

Летние программы

-
-
- -
- <?php echo get_post_meta( $programs_img, '_wp_attachment_image_alt', true ); ?> -

-

-

-

от ₽ /

- - -
- -
-
- - - -
- -

Приводите ребёнка, когда вам удобно

-
-
-
-
-

Половина дня

- -
-

Время пребывания — на выбор (до обеда или до вечера)

-
-
-
-
-
с 8:30 до 13:30
-
-

за 5 дней пребывания

-
-
-
-
-
-
с 13:30 до 18:30
-
-

за 5 дней пребывания

-
-
- -

Тематическая неделя на выбор

-
- -
    -
  • 5 дней пребывания в клубе
  • -
  • творческие занятия и мастер-классы 1 раз в день
  • -
  • умные прогулки 1 раз в день (в зависимости от погодных условий)
  • -
-
-
-
-
-

Полный день

- -
-

Пребывание в клубе с утра до вечера, дополнительные активности

-
-
-
-
-
-
с 8:30 до 18:30
-
-

за 5 дней пребывания

-
-
- -

Тематическая неделя на выбор

-
- -
    -
  • 5 дней пребывания в клубе
  • -
  • творческие занятия и мастер-классы 2 раза в день
  • -
  • умные прогулки 2 раза в день (в зависимости от погодных условий)
  • -
  • тематические экскурсии каждую неделю
  • -
-
-
-
- -
-

Наши наставники и ведущие мастер-классов

-
- " . $direction['direction_name']."";} - $teacher_foto = carbon_get_post_meta($mentor[0]['id'] , 'teacher_avatar'); - ?> -
- - - - <?php echo get_post_meta( $teacher_foto, '_wp_attachment_image_alt', true ); ?> - - - - - -
- -
- -
- -
-

Распорядок дня в клубе

-
- -
-
-
-
-

-

-

-
-
- -
-
- -
-

Наши фотографии

-
- - $alt -
"; - } ?> -
-
-
- -
-
-
-
-
-
- -
-
-
-
- - -
- -
-

Что говорят о нас родители

- 'review_type', - 'value' => 'camp', - 'compare' => '=' - ] - ]; - - ?> -
-
-
-
- -1, - 'post_type' => 'reviews', - 'orderby' => 'date', - 'order' => 'DESC', - 'suppress_filters' => true, - 'meta_query' => $key, - ); - $the_query = new WP_Query($args); - if ($the_query->have_posts()) : - while ($the_query->have_posts()) : $the_query->the_post(); - - $post_id = get_the_ID(); - - $review_date = get_the_date( 'd.m.Y'); - $review_level = carbon_get_post_meta( $post_id, 'review_level' ); - - $avatar = carbon_get_post_meta( $post_id, 'review_avatar' ); - - $stars = carbon_get_post_meta( $post_id, 'review_star' ); - $tekst_otzyva = carbon_get_post_meta( $post_id, 'review_text' ); - $prepodavatel = carbon_get_post_meta( $post_id, 'review_teacher' ); - - $add_class= "more"; - - if ( strlen($tekst_otzyva) < 350 ) $add_class= ""; - - if ( $tekst_otzyva ) : ?> -
-
-
-
- - <?php echo get_post_meta( $avatar, '_wp_attachment_image_alt', true ); ?> - -
-
-
-
-
-
-
- - - - - - -
-
- - -
-
-
- -
-
- -
-
-
- -
-
- - - -
-

Часто задаваемые вопросы

-
- - -
- $questions_question - - - - - - - - -
-
-
$questions_answer
-
-
"; - } else { - $HTMcol2 .= "
-
- $questions_question - - - - - - - - -
-
-
$questions_answer
-
-
"; - } - $count++; - } - echo "
$HTMcol1
"; - echo "
$HTMcol2
"; - ?> - -
- -
- -

Контакты

-
-
-
Телефон:
- -
Почта:
- -
Адрес:
-
-
Наши соцсети:
-
- - - - -
-
-
-
- -
-
-
- -
- - - - - - - - - - "; -} -?> + + $priceMax) $priceMax = $price; + if ($price < $priceMin) $priceMin = $price; +} +?> + + + +
+ + + + +
+

Что мы предлагаем

+
+ +
+ <?php echo get_post_meta( $suggestions_img, '_wp_attachment_image_alt', true ); ?> +

+

+
+ +
+
+

С любовью и заботой о каждом

+

Мы обеспечиваем безопасную и поддерживающую среду, где дети могут раскрывать свой + потенциал, исследовать мир и развивать дружбу под присмотром заботливых наставников.

+
+
+ инфографика возраста +

возраст

+

6,5−11 лет

+
+
+ инфографика группы +

каждая группа

+

до 10 детей

+
+
+ инфографика времени +

время посещения

+

на выбор

+
+
+ инфографика стоимости +

стоимость недели

+

от

+
+
+
+ +
+

Летние программы

+
+
+ +
+ <?php echo get_post_meta( $programs_img, '_wp_attachment_image_alt', true ); ?> +

+

+

+

от ₽ /

+ + +
+ +
+
+ + + +
+ +

Приводите ребёнка, когда вам удобно

+
+
+
+
+

Половина дня

+ +
+

Время пребывания — на выбор (до обеда или до вечера)

+
+
+
+
+
с 8:30 до 13:30
+
+

за 5 дней пребывания

+
+
+
+
+
+
с 13:30 до 18:30
+
+

за 5 дней пребывания

+
+
+ +

Тематическая неделя на выбор

+
+ +
    +
  • 5 дней пребывания в клубе
  • +
  • творческие занятия и мастер-классы 1 раз в день
  • +
  • умные прогулки 1 раз в день (в зависимости от погодных условий)
  • +
+
+
+
+
+

Полный день

+ +
+

Пребывание в клубе с утра до вечера, дополнительные активности

+
+
+
+
+
+
с 8:30 до 18:30
+
+

за 5 дней пребывания

+
+
+ +

Тематическая неделя на выбор

+
+ +
    +
  • 5 дней пребывания в клубе
  • +
  • творческие занятия и мастер-классы 2 раза в день
  • +
  • умные прогулки 2 раза в день (в зависимости от погодных условий)
  • +
  • тематические экскурсии каждую неделю
  • +
+
+
+
+ +
+

Наши наставники и ведущие мастер-классов

+
+ " . $direction['direction_name']."";} + $teacher_foto = carbon_get_post_meta($mentor[0]['id'] , 'teacher_avatar'); + ?> +
+ + + + <?php echo get_post_meta( $teacher_foto, '_wp_attachment_image_alt', true ); ?> + + + + + +
+ +
+ +
+ +
+

Распорядок дня в клубе

+
+ +
+
+
+
+

+

+

+
+
+ +
+
+ +
+

Наши фотографии

+
+ + $alt +
"; + } ?> +
+
+
+ +
+
+
+
+
+
+ +
+
+
+
+ + +
+ +
+

Что говорят о нас родители

+ 'review_type', + 'value' => 'camp', + 'compare' => '=' + ] + ]; + + ?> +
+
+
+
+ -1, + 'post_type' => 'reviews', + 'orderby' => 'date', + 'order' => 'DESC', + 'suppress_filters' => true, + 'meta_query' => $key, + ); + $the_query = new WP_Query($args); + if ($the_query->have_posts()) : + while ($the_query->have_posts()) : $the_query->the_post(); + + $post_id = get_the_ID(); + + $review_date = get_the_date( 'd.m.Y'); + $review_level = carbon_get_post_meta( $post_id, 'review_level' ); + + $avatar = carbon_get_post_meta( $post_id, 'review_avatar' ); + + $stars = carbon_get_post_meta( $post_id, 'review_star' ); + $tekst_otzyva = carbon_get_post_meta( $post_id, 'review_text' ); + $prepodavatel = carbon_get_post_meta( $post_id, 'review_teacher' ); + + $add_class= "more"; + + if ( strlen($tekst_otzyva) < 350 ) $add_class= ""; + + if ( $tekst_otzyva ) : ?> +
+
+
+
+ + <?php echo get_post_meta( $avatar, '_wp_attachment_image_alt', true ); ?> + +
+
+
+
+
+
+
+ + + + + + +
+
+ + +
+
+
+ +
+
+ +
+
+
+ +
+
+ + + +
+

Часто задаваемые вопросы

+
+ + +
+ $questions_question + + + + + + + + +
+
+
$questions_answer
+
+
"; + } else { + $HTMcol2 .= "
+
+ $questions_question + + + + + + + + +
+
+
$questions_answer
+
+
"; + } + $count++; + } + echo "
$HTMcol1
"; + echo "
$HTMcol2
"; + ?> + +
+ +
+ +

Контакты

+
+
+
Телефон:
+ +
Почта:
+ +
Адрес:
+
+
Наши соцсети:
+
+ + + + +
+
+
+
+ +
+
+
+ +
+ + + + + + + + + + "; +} +?> - - - + + +