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('
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Что мы предлагаем
-
-
-
-
-
-
-
-
-
-
- С любовью и заботой о каждом
- Мы обеспечиваем безопасную и поддерживающую среду, где дети могут раскрывать свой
- потенциал, исследовать мир и развивать дружбу под присмотром заботливых наставников.
-
-
-
-
возраст
-
6,5−11 лет
-
-
-
-
каждая группа
-
до 10 детей
-
-
-
-
время посещения
-
на выбор
-
-
-
-
стоимость недели
-
от ₽
-
-
-
-
-
- Летние программы
-
-
-
-
-
-
-
-
-
от ₽ /
-
-
Подробнее
-
-
-
-
-
-
-
-
-
- Приводите ребёнка, когда вам удобно
-
-
-
-
-
Половина дня
-
-
-
Время пребывания — на выбор (до обеда или до вечера)
-
-
-
-
за 5 дней пребывания
-
-
-
-
за 5 дней пребывания
-
-
-
-
Тематическая неделя на выбор
-
-
Занять место
-
- 5 дней пребывания в клубе
- творческие занятия и мастер-классы 1 раз в день
- умные прогулки 1 раз в день (в зависимости от погодных условий)
-
-
-
-
-
-
Полный день
-
-
-
Пребывание в клубе с утра до вечера, дополнительные активности
-
-
-
-
за 5 дней пребывания
-
-
-
-
Тематическая неделя на выбор
-
-
Занять место
-
- 5 дней пребывания в клубе
- творческие занятия и мастер-классы 2 раза в день
- умные прогулки 2 раза в день (в зависимости от погодных условий)
- тематические экскурсии каждую неделю
-
-
-
-
-
-
-Наши наставники и ведущие мастер-классов
-
- " . $direction['direction_name']."";}
- $teacher_foto = carbon_get_post_meta($mentor[0]['id'] , 'teacher_avatar');
- ?>
-
-
-
-
-
-
-
-
-
Подробнее
-
-
-
-
-
-
-
-
- Распорядок дня в клубе
-
-
-
-
- Наши фотографии
-
-
-
-
";
- } ?>
-
-
-
-
-
-
-
- Что говорят о нас родители
- '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 ) : ?>
-
-
-
-
-
-
-
-
-
-
-
-
-
- ... Читать еще
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Часто задаваемые вопросы
-
-
-
-
-
$questions_question
-
-
-
-
-
-
-
-
-
-
-
";
- } else {
- $HTMcol2 .= "
-
-
$questions_question
-
-
-
-
-
-
-
-
-
-
-
";
- }
- $count++;
- }
- echo "$HTMcol1
";
- echo "$HTMcol2
";
- ?>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Опыт работы в сфере образования:
-
-
-
-
-
-
-
-
-
-
-
-
-
Дополнительное образование:
-
-
-
-
-
-
-
-
-
-
-
-
$banner_add_title
-
$banner_add_text
-
ЗАБРОНИРОВАТЬ
-
$banner_add_text_min
-
-
- ";
-}
-?>
+
+ $priceMax) $priceMax = $price;
+ if ($price < $priceMin) $priceMin = $price;
+}
+?>
+
+
+
+
+
+
+
+
+
+ Что мы предлагаем
+
+
+
+
+
+
+
+
+
+
+ С любовью и заботой о каждом
+ Мы обеспечиваем безопасную и поддерживающую среду, где дети могут раскрывать свой
+ потенциал, исследовать мир и развивать дружбу под присмотром заботливых наставников.
+
+
+
+
возраст
+
6,5−11 лет
+
+
+
+
каждая группа
+
до 10 детей
+
+
+
+
время посещения
+
на выбор
+
+
+
+
стоимость недели
+
от ₽
+
+
+
+
+
+ Летние программы
+
+
+
+
+
+
+
+
+
от ₽ /
+
+
Подробнее
+
+
+
+
+
+
+
+
+
+ Приводите ребёнка, когда вам удобно
+
+
+
+
+
Половина дня
+
+
+
Время пребывания — на выбор (до обеда или до вечера)
+
+
+
+
за 5 дней пребывания
+
+
+
+
за 5 дней пребывания
+
+
+
+
Тематическая неделя на выбор
+
+
Занять место
+
+ 5 дней пребывания в клубе
+ творческие занятия и мастер-классы 1 раз в день
+ умные прогулки 1 раз в день (в зависимости от погодных условий)
+
+
+
+
+
+
Полный день
+
+
+
Пребывание в клубе с утра до вечера, дополнительные активности
+
+
+
+
за 5 дней пребывания
+
+
+
+
Тематическая неделя на выбор
+
+
Занять место
+
+ 5 дней пребывания в клубе
+ творческие занятия и мастер-классы 2 раза в день
+ умные прогулки 2 раза в день (в зависимости от погодных условий)
+ тематические экскурсии каждую неделю
+
+
+
+
+
+
+Наши наставники и ведущие мастер-классов
+
+ " . $direction['direction_name']."";}
+ $teacher_foto = carbon_get_post_meta($mentor[0]['id'] , 'teacher_avatar');
+ ?>
+
+
+
+
+
+
+
+
+
Подробнее
+
+
+
+
+
+
+
+
+ Распорядок дня в клубе
+
+
+
+
+ Наши фотографии
+
+
+
+
";
+ } ?>
+
+
+
+
+
+
+
+ Что говорят о нас родители
+ '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 ) : ?>
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ... Читать еще
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Часто задаваемые вопросы
+
+
+
+
+
$questions_question
+
+
+
+
+
+
+
+
+
+
+
";
+ } else {
+ $HTMcol2 .= "
+
+
$questions_question
+
+
+
+
+
+
+
+
+
+
+
";
+ }
+ $count++;
+ }
+ echo "$HTMcol1
";
+ echo "$HTMcol2
";
+ ?>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Опыт работы в сфере образования:
+
+
+
+
+
+
+
+
+
+
+
+
+
Дополнительное образование:
+
+
+
+
+
+
+
+
+
+
+
+
$banner_add_title
+
$banner_add_text
+
ЗАБРОНИРОВАТЬ
+
$banner_add_text_min
+
+
+ ";
+}
+?>
-
-
-
+
+
+