+
- diff --git a/wp-content/themes/dekart/acf-json/group_camp_city.json b/wp-content/themes/dekart/acf-json/group_camp_city.json deleted file mode 100644 index b3d527f..0000000 --- a/wp-content/themes/dekart/acf-json/group_camp_city.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "key": "group_camp_city", - "title": "Город (page-camp)", - "fields": [ - { - "key": "field_camp_city", - "label": "Город (в предложном падеже)", - "name": "camp_city", - "aria-label": "", - "type": "text", - "instructions": "Например: \"в Щёлково\", \"в Королёве\". Это значение подставится во все SEO-заголовки и микроразметку.", - "required": 0, - "conditional_logic": 0, - "wrapper": { - "width": "", - "class": "", - "id": "" - }, - "default_value": "в Щёлково", - "maxlength": "", - "allow_in_bindings": 0, - "placeholder": "", - "prepend": "", - "append": "" - } - ], - "location": [ - [ - { - "param": "page_template", - "operator": "==", - "value": "page-camp.php" - } - ] - ], - "menu_order": 0, - "position": "normal", - "style": "default", - "label_placement": "top", - "instruction_placement": "label", - "hide_on_screen": "", - "active": true, - "description": "", - "show_in_rest": 0 -} diff --git a/wp-content/themes/dekart/assets/css/camp.css b/wp-content/themes/dekart/assets/css/camp.css index 25a279f..04ad2f7 100644 --- a/wp-content/themes/dekart/assets/css/camp.css +++ b/wp-content/themes/dekart/assets/css/camp.css @@ -995,7 +995,7 @@ html { inset: 0; display: none; align-items: center; - justify-content: space-between; + justify-content: center; background: rgba(0,0,0,0.8); z-index: 100; padding: 16px; @@ -1032,7 +1032,7 @@ html { background: rgba(0,0,0,0.35); display: flex; align-items: center; - justify-content: space-between; + justify-content: center; cursor: pointer; transition: background .2s; } @@ -1608,7 +1608,7 @@ html { height: 100%; z-index: 99999; align-items: center; - justify-content: space-between; + justify-content: center; } .lw-modal--open { @@ -1651,7 +1651,7 @@ html { height: 40px; display: flex; align-items: center; - justify-content: space-between; + justify-content: center; cursor: pointer; z-index: 2; transition: background 0.2s; @@ -2005,26 +2005,61 @@ html { word-break: break-word; } +/* ─── Десктоп: как карточки наставников ─── */ +.camp-reviews .lw-scroll-x { + overflow: visible; + padding: 0; +} +.camp-reviews .lw-grid--3 { + display: flex; + flex-wrap: wrap; + gap: 30px; + justify-content: center; +} +.camp-reviews .lw-grid--3 .lw-card { + width: calc(25% - 23px); + min-width: 280px; + padding: 24px; + border-radius: 20px; + box-shadow: 0 2px 16px rgba(0,0,0,0.06); + transition: transform 0.3s ease, box-shadow 0.3s ease; +} +.camp-reviews .lw-grid--3 .lw-card:hover { + transform: translateY(-4px); + box-shadow: 0 8px 32px rgba(0,0,0,0.1); +} + +@media (max-width: 1200px) { + .camp-reviews .lw-grid--3 .lw-card { + width: calc(50% - 15px); + min-width: 280px; + } +} + @media (max-width: 768px) { - .lw-grid--3, - .lw-grid--2 { + .camp-reviews .lw-scroll-x { + overflow-x: auto; + -webkit-overflow-scrolling: touch; + padding-bottom: 8px; + } + .camp-reviews .lw-grid--3 { display: flex; gap: 16px; overflow-x: auto; scroll-snap-type: x mandatory; - -webkit-overflow-scrolling: touch; + flex-wrap: nowrap; + justify-content: flex-start; padding-bottom: 4px; } - .lw-grid--3 .lw-card, - .lw-grid--2 .lw-card { + .camp-reviews .lw-grid--3 .lw-card { flex: 0 0 300px; + width: auto; scroll-snap-align: start; } } @media (max-width: 480px) { - .lw-grid--3 .lw-card, - .lw-grid--2 .lw-card { + .camp-reviews .lw-grid--3 .lw-card { flex: 0 0 260px; } } @@ -2040,7 +2075,7 @@ html { background-color: #000; display: flex; align-items: center; - justify-content: space-between; + justify-content: center; z-index: 99999; } diff --git a/wp-content/themes/dekart/functions.php b/wp-content/themes/dekart/functions.php index 205beda..0b08895 100644 --- a/wp-content/themes/dekart/functions.php +++ b/wp-content/themes/dekart/functions.php @@ -712,34 +712,28 @@ function add_carbon() { ->set_width( 70 ), )), )) + ->add_tab('⭐ Отзывы', array( + Field::make( 'html', 'reviews_tab_desc', '' ) + ->set_html( '
Секция: .camp-reviews. Отзывы выводятся на странице лагеря.
' ), + Field::make( 'complex', 'camp_reviews_list', 'Отзывы о лагере' ) + ->set_layout( 'tabbed-horizontal' ) + ->set_help_text( 'Добавьте отзывы родителей. Показываются на странице лагеря.' ) + ->add_fields( array( + Field::make( 'text', 'review_author', 'Имя автора' ) + ->set_width( 30 ), + Field::make( 'text', 'review_rating', 'Оценка (1–5)' ) + ->set_width( 15 ) + ->set_attribute( 'type', 'number' ), + Field::make( 'textarea', 'review_text', 'Текст отзыва' ) + ->set_width( 55 ), + )), + )) ->add_tab('📍 Контакты и карта', array( Field::make( 'html', 'contacts_tab_desc', '' ) - ->set_html( 'Секция: .camp-contact
' ), - 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' ), + ->set_html( '⚠️ Данные филиала (телефон, email, адрес, соцсети) — в Настройки филиала (меню слева). Здесь только подпись метки карты.
' ), 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', 'Название' ) - ->set_width( 100 ), - Field::make( 'image', 'social_media_img', 'Иконка/логотип' ) - ->set_help_text( 'Оптимально: 1200x800px, WebP/JPG' ) - ->set_width( 20 ), - Field::make( 'text', 'social_media_link', 'Ссылка' ) - ->set_width( 80 ), - )), )) ->add_tab('🗂️ Битрикс24', array( Field::make( 'html', 'bitrix_tab_desc', '' ) @@ -1099,3 +1093,161 @@ function dekart_output_counters_footer() { $footer = stripslashes(get_option('dekart_counter_footer', '')); if ($footer) echo "\n" . $footer . "\n"; } + +// ───────────────────────────────────────────────────────────── +// Настройки филиала — WordPress Settings API (под Счетчиками) +// ───────────────────────────────────────────────────────────── +add_action( 'admin_menu', 'dekart_branch_add_menu' ); +function dekart_branch_add_menu() { + add_menu_page( + 'Настройки филиала', + 'Настройки филиала', + 'edit_posts', + 'branch-settings', + 'dekart_branch_settings_page', + 'dashicons-location-alt', + 3.1 + ); +} + +add_action( 'admin_init', 'dekart_branch_register_settings' ); +function dekart_branch_register_settings() { + $text_fields = array( + 'branch_city_prep' => 'text', + 'branch_city' => 'text', + 'branch_region' => 'text', + 'branch_address' => 'text', + 'branch_coords' => 'text', + 'branch_postal_code' => 'text', + 'branch_phone' => 'text', + 'branch_email' => 'email', + 'branch_whatsapp' => 'url', + 'branch_telegram' => 'url', + 'branch_name' => 'text', + 'branch_price_range' => 'text', + ); + foreach ( $text_fields as $slug => $type ) { + register_setting( 'dekart_branch_group', $slug, array( 'sanitize_callback' => $type === 'email' ? 'sanitize_email' : ( $type === 'url' ? 'esc_url_raw' : 'sanitize_text_field' ) ) ); + } + register_setting( 'dekart_branch_group', 'branch_logo', array( 'sanitize_callback' => 'absint' ) ); + register_setting( 'dekart_branch_group', 'branch_social' ); +} + +function dekart_branch_settings_page() { + ?> +
-
+ alt="Детский лагерь Декарт " loading="eager">
+
6,5−11 лет
@@ -225,7 +272,7 @@ $metrics = [до 10 детей
@@ -235,7 +282,7 @@ $metrics = [на выбор
@@ -245,7 +292,7 @@ $metrics = [от ₽
@@ -273,7 +320,7 @@ $metrics = [ $programs_content = $item['programs_content']; $programs_price_global = carbon_get_post_meta($post_id, 'price_half_day');?>
+
-