<?php
require_once get_template_directory() . '/inc/template-tags.php';
/* --- Удаляем мета из YOASTSEO START--- */
add_filter( 'wpseo_json_ld_output', '__return_false' );
/* --- Удаляем мета из YOASTSEO END --- */
add_theme_support('title-tag');
/* --- #SEND Review Form --- */
add_action( 'template_redirect', 'author_archive_redirect' );
add_filter( 'author_link', 'remove_author_pages_link' );
// редиректим на главную со страниц авторов
function author_archive_redirect() {
	if( is_author() ) {
		wp_redirect( home_url(), 301 );
		exit;
	}
}
// удаляем ссылку
function remove_author_pages_link( $content ) {
	return home_url();
}
/*
/*  --- Courses ---  */
add_action( 'init', 'create_courses_hierarchical_taxonomy', 0 );
function create_courses_hierarchical_taxonomy() {
	$labels = array(
		'name'              => _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 сентября<br class="desktop"><span>скидка 10%</span> на весь учебный год!'),
		))
		->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( 'Пример: &lt;span&gt;Математика&lt;/span&gt;&lt;span&gt;Русский язык&lt;/span&gt;'),
					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. Пример: &lt;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&gt;&lt;/iframe&gt;' ),
			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('🖼️ Первый экран', array(
			Field::make( 'html', 'hero_tab_desc', '' )
				->set_html( '<p style="color: #64748b; font-size: 13px; margin: 0 0 12px;">Шаблон: <strong>page-camp.php</strong> · Секция: <strong>.hero-media-search</strong></p>' ),
			Field::make( 'separator', 'hero_media_sep', 'Изображения' ),
			Field::make( 'image', 'banner_img', 'Фото на весь экран (десктоп)' )
				->set_help_text( 'Оптимально: 1920×1080 px, WebP/JPG. Дети в движении, эмоции.' )
				->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', 'Заголовок (вторая часть, цветная)' )
				->set_default_value( 'Big Summer Fun!' )
				->set_width( 50 )
				->set_help_text( 'Выделяется цветом на фоне основного.' ),
			Field::make( 'separator', 'hero_cta_sep', 'Кнопка' ),
			Field::make( 'text', 'hero_btn_primary', 'Текст главной кнопки (CTA)' )
				->set_default_value( 'Записаться на пробный день' )
				->set_width( 100 )
				->set_help_text( 'Главное действие, к которому призываем. Лучше: конкретная выгода, а не действие.' ),
			Field::make( 'separator', 'hero_metrics_sep', 'Метрики доверия (блок достижений)' ),
			Field::make( 'image', 'hero_metric_1_img', 'Иконка метрики 1 (изображение)' )
				->set_width( 30 )
				->set_help_text( 'Оптимально: 1200x800px, WebP/JPG' ),
			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( 'Оптимально: 1200x800px, WebP/JPG' ),
			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( 'Оптимально: 1200x800px, WebP/JPG' ),
			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( 'html', 'about_tab_desc', '' )
				->set_html( '<p style="color: #64748b; font-size: 13px; margin: 0 0 12px;">Секция: <strong>.about-us</strong></p>' ),
			Field::make( 'separator', 'about_us_sep', 'Текст и фото' ),
			Field::make( 'image', 'about_us_img', 'Фото' )
				->set_help_text( 'Оптимально: 1200x800px, WebP/JPG. Реальные дети, эмоции.' )
				->set_width( 30 ),
			Field::make( 'textarea', 'about_us_text', 'Текст о нас' )
				->set_help_text( 'Краткий текст о лагере. Выводится на странице лагеря после Hero-секции.' )
				->set_default_value( 'Dekart — это сеть детских клубов, где наука, творчество и спорт объединяются в одну захватывающую программу. Мы помогаем детям раскрывать таланты, находить друзей и проводить лето с пользой. Наши вожатые — профессиональные педагоги и наставники, которые создают атмосферу доверия и вдохновения. Каждый день в лагере — это новое открытие.' ),
		))
		->add_tab('🏭 Преимущества', array(
			Field::make( 'html', 'suggestions_tab_desc', '' )
				->set_html( '<p style="color: #64748b; font-size: 13px; margin: 0 0 12px;">Секция: <strong>.suggestions</strong></p>' ),
			Field::make( 'complex', 'suggestions', 'Блок «Почему выбирают нас»' )
				->set_layout( 'tabbed-horizontal' )
				->set_help_text( '3–6 преимуществ с заголовком и описанием.' )
				->add_fields( array(
					Field::make( 'text', 'suggestions_title', 'Заголовок' )
						->set_width( 100 ),
					Field::make( 'textarea', 'suggestions_text', 'Описание' )
						->set_width( 100 ),
				)),
		))
		->add_tab('📅 Программы', array(
			Field::make( 'html', 'programs_tab_desc', '' )
				->set_html( '<p style="color: #64748b; font-size: 13px; margin: 0 0 12px;">Секция: <strong>.programs</strong></p>' ),
			Field::make( 'complex', 'programs', 'Список программ (смен)' )
				->set_layout( 'tabbed-horizontal' )
				->set_help_text( 'Добавьте каждую тематическую смену отдельной записью.' )
				->add_fields( array(
					Field::make( 'image', 'programs_img', 'Изображение смены' )
						->set_help_text( 'Оптимально: 1200x800px, WebP/JPG' )
						->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( 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( 'html', 'pricing_tab_desc', '' )
				->set_html( '<p style="color: #64748b; font-size: 13px; margin: 0 0 12px;">Секция: <strong>.bring-child</strong></p>' ),
			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' ),
		))
		->add_tab('👨‍🏫 Наставники', array(
			Field::make( 'html', 'mentors_tab_desc', '' )
				->set_html( '<p style="color: #64748b; font-size: 13px; margin: 0 0 12px;">Секция: <strong>.mentors</strong></p>' ),
			Field::make( 'complex', 'mentors', 'Список наставников лагеря' )
				->set_layout( 'tabbed-horizontal' )
				->set_help_text( 'Каждый наставник — отдельная запись.' )
				->add_fields( array(
					Field::make( 'text', 'mentor_name', 'ФИО наставника' )
						->set_width( 50 ),
					Field::make( 'image', 'mentor_foto', 'Фото наставника' )
						->set_help_text( 'Оптимально: 1200x800px, WebP/JPG' )
						->set_width( 50 ),
					Field::make( 'text', 'mentor_job', 'Должность в лагере' )
						->set_width( 100 ),
					Field::make( 'textarea', 'mentor_about', 'О себе' )
						->set_help_text( 'Кратко о наставнике (показывается на карточке).' ),
				))
		))
		->add_tab('⏰ Распорядок дня', array(
			Field::make( 'html', 'routine_tab_desc', '' )
				->set_html( '<p style="color: #64748b; font-size: 13px; margin: 0 0 12px;">Секция: <strong>.routine</strong></p>' ),
			Field::make( 'complex', 'routine', 'Расписание по времени' )
				->set_help_text( 'Добавьте пункты распорядка по порядку следования.' )
				->add_fields( array(
					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( 'html', 'fotos_tab_desc', '' )
				->set_html( '<p style="color: #64748b; font-size: 13px; margin: 0 0 12px;">Секция: <strong>.foto</strong></p>' ),
			Field::make( 'complex', 'fotos', 'Галерея фотографий' )
				->set_layout( 'tabbed-horizontal' )
				->set_help_text( 'Добавьте реальные фото детей из лагеря. Формат: WebP, 1:1 или 4:3.' )
				->add_fields( array(
					Field::make( 'image', 'foto', 'Фотография' )
						->set_help_text( 'Оптимально: 1200x800px, WebP/JPG, до 300Кб' ),
				)),
		))
		->add_tab('❓ Вопросы и ответы (FAQ)', array(
			Field::make( 'html', 'faq_tab_desc', '' )
				->set_html( '<p style="color: #64748b; font-size: 13px; margin: 0 0 12px;">Секция: <strong>.camp-faq</strong></p>' ),
			Field::make( 'complex', 'questions', 'Список вопросов и ответов' )
				->set_layout( 'tabbed-horizontal' )
				->set_help_text( 'Чем больше вопросов, тем меньше возражений у родителей. Минимум 7–8 вопросов.' )
				->add_fields( array(
					Field::make( 'textarea', 'questions_question', 'Текст вопроса' )
						->set_width( 30 ),
					Field::make( 'textarea', 'questions_answer', 'Текст ответа' )
						->set_width( 70 ),
				)),
		))
		->add_tab('⭐ Отзывы', array(
			Field::make( 'html', 'reviews_tab_desc', '' )
				->set_html( '<p style="color: #64748b; font-size: 13px; margin: 0 0 12px;">Секция: <strong>.camp-reviews</strong>. Отзывы выводятся на странице лагеря.</p>' ),
			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( '<p style="color: #64748b; font-size: 13px; margin: 0 0 12px;">⚠️ Данные филиала (телефон, email, адрес, соцсети) — в <strong>Настройки филиала</strong> (меню слева). Здесь только подпись метки карты.</p>' ),
			Field::make( 'text', 'contact_location_text', 'Подпись метки на карте' )
				->set_width( 50 )
				->set_help_text( 'Что написано в баллуне на карте.' ),
		))
		->add_tab('🗂️ Битрикс24', array(
			Field::make( 'html', 'bitrix_tab_desc', '' )
				->set_html( '<p style="color: #64748b; font-size: 13px; margin: 0 0 12px;">Секция: <strong>.modal-camp-request-form</strong></p>' ),
			Field::make( 'textarea', 'camp_bitrix_script', 'Скрипт формы Битрикс24' )
				->set_help_text( 'Вставьте полный JS-код интеграции с CRM-формой Битрикс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 '<meta property="og:image" content="' . wp_get_attachment_url($snippet) . '" >' . "\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.3'
		);
		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.1'
		);
	}
}
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('<script ', '<script defer ', $tag);
}
add_filter('script_loader_tag', 'dekart_add_defer_to_scripts', 10, 3);

// ====================================================
// ✅ Заголовки безопасности — только на фронтенде
// ====================================================
function dekart_security_headers() {
	// Не применяем в админке, AJAX и cron
	if ( is_admin() || wp_doing_ajax() || defined('DOING_CRON') ) {
		return;
	}
	header('X-Frame-Options: SAMEORIGIN');
	header('X-XSS-Protection: 1; mode=block');
	header('X-Content-Type-Options: nosniff');
	header('Referrer-Policy: strict-origin-when-cross-origin');
}
add_action('send_headers', 'dekart_security_headers');

function dekart_add_preload_hints() {
	// резерв для preload hints
}
add_action('wp_head', 'dekart_add_preload_hints', 1);// Тестовая строка для проверки деплоя 2026-05-06
// Updated via WordPress admin 2026-05-07

// === ACF JSON Auto-save ===
// Автоматически сохраняет группы полей в JSON при редактировании
add_filter('acf/settings/save_json', function($path) {
    return get_stylesheet_directory() . '/acf-json';
});

// Загружает группы полей из JSON
add_filter('acf/settings/load_json', function($paths) {
    $paths[] = get_stylesheet_directory() . '/acf-json';
    return $paths;
});

// Автоматическое удаление JSON при удалении группы полей
add_action('trashed_post', 'dekart_acf_delete_json', 10, 1);
add_action('deleted_post', 'dekart_acf_delete_json', 10, 1);
function dekart_acf_delete_json($post_id) {
    if (get_post_type($post_id) !== 'acf-field-group') {
        return;
    }
    
    $key = get_post_field('post_name', $post_id);
    $json_file = get_stylesheet_directory() . '/acf-json/' . $key . '.json';
    
    if (file_exists($json_file)) {
        unlink($json_file);
    }
}

// ─────────────────────────────────────────────────────────────
// Счетчики — централизованное управление (ТОП-меню)
add_action('admin_menu', 'dekart_counters_menu');
function dekart_counters_menu() {
    add_menu_page('Счетчики', 'Счетчики', 'manage_options', 'site-analytics-settings', 'dekart_counters_page', 'dashicons-chart-bar', 3);
}

add_action('admin_init', 'dekart_counters_settings');
function dekart_counters_settings() {
    register_setting('dekart_counters_group', 'dekart_counter_yandex');
    register_setting('dekart_counters_group', 'dekart_counter_gtm_head');
    register_setting('dekart_counters_group', 'dekart_counter_gtm_body');
    register_setting('dekart_counters_group', 'dekart_counter_footer');

    $yandex_default = "<!-- Yandex.Metrika counter -->\n<script>\n    (function(m,e,t,r,i,k,a){\n        m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};\n        m[i].l=1*new Date();\n        for (var j = 0; j < document.scripts.length; j++) {if (document.scripts[j].src === r) { return; }}\n        k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)\n    })(window, document,'script','https://mc.yandex.ru/metrika/tag.js', 'ym');\n\n    ym(99835482, 'init', {webvisor:true, clickmap:true, referrer: document.referrer, url: location.href, accurateTrackBounce:true, trackLinks:true});\n</script>\n<!-- /Yandex.Metrika counter -->";

    $gtm_head_default = "<!-- Google Tag Manager -->\n<script>\n(function(w,d,s,l,i){\n    w[l]=w[l]||[];\n    w[l].push({'gtm.start':new Date().getTime(),event:'gtm.js'});\n    var f=d.getElementsByTagName(s)[0],\n        j=d.createElement(s),\n        dl=l!='dataLayer'?'&l='+l:'';\n    j.async=true;\n    j.src='https://www.googletagmanager.com/gtm.js?id='+i+dl;\n    f.parentNode.insertBefore(j,f);\n})(window,document,'script','dataLayer','GTM-WJVZ4MKN');\n</script>\n<!-- /Google Tag Manager -->";

    $gtm_body_default = "<!-- Google Tag Manager (noscript) -->\n<noscript><iframe src=\"https://www.googletagmanager.com/ns.html?id=GTM-WJVZ4MKN\"\nheight=\"0\" width=\"0\" style=\"display:none;visibility:hidden\"></iframe></noscript>\n<!-- /Google Tag Manager (noscript) -->";

    $footer_default = "<!-- Yandex.Metrika counter -->\n<noscript><div><img src=\"https://mc.yandex.ru/watch/99835482\" style=\"position:absolute; left:-9999px;\" alt=\"\"></div></noscript>\n<!-- /Yandex.Metrika counter -->";

    if (get_option('dekart_counter_yandex') === false) add_option('dekart_counter_yandex', $yandex_default);
    if (get_option('dekart_counter_gtm_head') === false) add_option('dekart_counter_gtm_head', $gtm_head_default);
    if (get_option('dekart_counter_gtm_body') === false) add_option('dekart_counter_gtm_body', $gtm_body_default);
    if (get_option('dekart_counter_footer') === false) add_option('dekart_counter_footer', $footer_default);
}

function dekart_counters_page() {
    ?>
    <div class="wrap">
        <h1>Счетчики</h1>
        <form method="post" action="options.php">
            <?php settings_fields('dekart_counters_group'); ?>
            <h2 class="title">Яндекс.Метрика / Tag Manager</h2>
            <table class="form-table">
                <tr>
                    <th scope="row">Yandex Code</th>
                    <td><textarea name="dekart_counter_yandex" rows="10" class="large-text code"><?php echo esc_textarea(get_option('dekart_counter_yandex', '')); ?></textarea>
                    <p class="description">Код счетчика. Выводится в <code>&lt;head&gt;</code>.</p></td>
                </tr>
            </table>
            <h2 class="title">Google Tag Manager (GTM)</h2>
            <table class="form-table">
                <tr>
                    <th scope="row">GTM Head</th>
                    <td><textarea name="dekart_counter_gtm_head" rows="10" class="large-text code"><?php echo esc_textarea(get_option('dekart_counter_gtm_head', '')); ?></textarea>
                    <p class="description">Основной код GTM. Выводится в <code>&lt;head&gt;</code>.</p></td>
                </tr>
                <tr>
                    <th scope="row">GTM Body</th>
                    <td><textarea name="dekart_counter_gtm_body" rows="6" class="large-text code"><?php echo esc_textarea(get_option('dekart_counter_gtm_body', '')); ?></textarea>
                    <p class="description">Код <code>&lt;noscript&gt;</code>. Выводится сразу после открытия <code>&lt;body&gt;</code> через хук <code>wp_body_open</code>.</p></td>
                </tr>
            </table>
            <h2 class="title">Произвольные скрипты</h2>
            <table class="form-table">
                <tr>
                    <th scope="row">Site-wide Footer Scripts</th>
                    <td><textarea name="dekart_counter_footer" rows="10" class="large-text code"><?php echo esc_textarea(get_option('dekart_counter_footer', '')); ?></textarea>
                    <p class="description">Для чатов, пикселей и прочих скриптов. Выводится в <code>&lt;footer&gt;</code>.</p></td>
                </tr>
            </table>
            <?php submit_button(); ?>
        </form>
    </div>
    <?php
}

add_action('wp_head', 'dekart_output_counters', 1);
function dekart_output_counters() {
    $yandex  = stripslashes(get_option('dekart_counter_yandex', ''));
    $gtmhead = stripslashes(get_option('dekart_counter_gtm_head', ''));
    if ($yandex)  echo "\n" . $yandex . "\n";
    if ($gtmhead) echo "\n" . $gtmhead . "\n";
}

add_action('wp_body_open', 'dekart_output_gtm_body', 1);
function dekart_output_gtm_body() {
    $gtmbody = stripslashes(get_option('dekart_counter_gtm_body', ''));
    if ($gtmbody) echo "\n" . $gtmbody . "\n";
}

add_action('wp_footer', 'dekart_output_counters_footer', 100);
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() {
	?>
	<div class="wrap">
		<h1>Настройки филиала</h1>
		<form method="post" action="options.php">
			<?php settings_fields( 'dekart_branch_group' ); ?>
			<style>.branch-section{background:#fff;padding:20px;margin:20px 0;border:1px solid #c3c4c7;border-radius:4px;max-width:800px}.branch-section h2{margin-top:0;padding-bottom:10px;border-bottom:1px solid #eee}.branch-field{margin-bottom:16px}.branch-field label{display:block;font-weight:600;margin-bottom:4px}.branch-field input[type=text],.branch-field input[type=email],.branch-field input[type=url]{width:100%;max-width:400px}.branch-field .desc{color:#646970;font-size:12px;margin:4px 0 0}.branch-media-wrap{display:flex;align-items:center;gap:12px}.branch-media-wrap img{max-width:120px;max-height:80px;border:1px solid #ddd;border-radius:4px}.branch-social-row{display:flex;gap:8px;align-items:center;margin-bottom:8px}.branch-social-row input{flex:1}</style>

			<div class="branch-section">
				<h2>🌍 ГЕО</h2>
				<div class="branch-field">
					<label>Город (с предлогом)</label>
					<input type="text" name="branch_city_prep" value="<?php echo esc_attr( get_option( 'branch_city_prep', 'в Щёлково' ) ); ?>">
					<p class="desc">Например: "в Щёлково", "в Королёве". Для alt-текстов и описаний.</p>
				</div>
				<div class="branch-field">
					<label>Город (чистый)</label>
					<input type="text" name="branch_city" value="<?php echo esc_attr( get_option( 'branch_city', 'Щёлково' ) ); ?>">
					<p class="desc">Для JSON-LD addressLocality.</p>
				</div>
				<div class="branch-field">
					<label>Регион</label>
					<input type="text" name="branch_region" value="<?php echo esc_attr( get_option( 'branch_region', 'Московская область' ) ); ?>">
				</div>
				<div class="branch-field">
					<label>Адрес (улица, дом)</label>
					<input type="text" name="branch_address" value="<?php echo esc_attr( get_option( 'branch_address', 'ул. Талсинская, 24' ) ); ?>">
				</div>
				<div class="branch-field">
					<label>Координаты для карты</label>
					<input type="text" name="branch_coords" value="<?php echo esc_attr( get_option( 'branch_coords', '55.9217, 37.9914' ) ); ?>">
					<p class="desc">Формат: "55.9217, 37.9914"</p>
				</div>
				<div class="branch-field">
					<label>Почтовый индекс</label>
					<input type="text" name="branch_postal_code" value="<?php echo esc_attr( get_option( 'branch_postal_code', '' ) ); ?>">
				</div>
			</div>

			<div class="branch-section">
				<h2>📞 КОНТАКТЫ</h2>
				<div class="branch-field">
					<label>Телефон</label>
					<input type="text" name="branch_phone" value="<?php echo esc_attr( get_option( 'branch_phone', '+7 (495) 120-00-78' ) ); ?>">
				</div>
				<div class="branch-field">
					<label>Email</label>
					<input type="email" name="branch_email" value="<?php echo esc_attr( get_option( 'branch_email', 'info@dekart.school' ) ); ?>">
				</div>
				<div class="branch-field">
					<label>WhatsApp</label>
					<input type="url" name="branch_whatsapp" value="<?php echo esc_attr( get_option( 'branch_whatsapp', '' ) ); ?>">
					<p class="desc">https://wa.me/79991234567</p>
				</div>
				<div class="branch-field">
					<label>Telegram</label>
					<input type="url" name="branch_telegram" value="<?php echo esc_attr( get_option( 'branch_telegram', '' ) ); ?>">
				</div>
			</div>

			<div class="branch-section">
				<h2>🏢 ОРГАНИЗАЦИЯ</h2>
				<div class="branch-field">
					<label>Полное название организации</label>
					<input type="text" name="branch_name" value="<?php echo esc_attr( get_option( 'branch_name', 'Декарт' ) ); ?>">
				</div>
				<div class="branch-field">
					<label>Ценовой диапазон</label>
					<input type="text" name="branch_price_range" value="<?php echo esc_attr( get_option( 'branch_price_range', '$$' ) ); ?>">
					<p class="desc">Для микроразметки. Например: "$", "$$", "$$$".</p>
				</div>
				<div class="branch-field">
					<label>Логотип организации (ID вложения)</label>
					<input type="number" name="branch_logo" value="<?php echo esc_attr( get_option( 'branch_logo', '' ) ); ?>" min="0" style="max-width:120px">
					<p class="desc">ID изображения из Медиафайлы. Для JSON-LD image.</p>
				</div>
			</div>

			<div class="branch-section">
				<h2>🔗 СОЦСЕТИ</h2>
				<p class="desc">Добавьте ссылки (название и URL).</p>
				<div id="branch-social-repeater">
					<?php
					$social = get_option( 'branch_social', array() );
					if ( ! is_array( $social ) || empty( $social ) ) {
						$social = array( array( 'name' => '', 'url' => '' ) );
					}
					foreach ( $social as $i => $item ) {
						$name = esc_attr( $item['name'] ?? '' );
						$url  = esc_attr( $item['url'] ?? '' );
						echo '<div class="branch-social-row"><input type="text" name="branch_social[' . $i . '][name]" value="' . $name . '" placeholder="Название"><input type="url" name="branch_social[' . $i . '][url]" value="' . $url . '" placeholder="https://..."><button type="button" class="button branch-social-remove">—</button></div>';
					}
					?>
				</div>
				<button type="button" class="button" id="branch-social-add">+ Добавить</button>
				<script>
				document.getElementById('branch-social-add')?.addEventListener('click', function(){
					var c = document.querySelectorAll('#branch-social-repeater .branch-social-row').length;
					var d = document.createElement('div'); d.className = 'branch-social-row';
					d.innerHTML = '<input type="text" name="branch_social['+c+'][name]" value="" placeholder="Название"><input type="url" name="branch_social['+c+'][url]" value="" placeholder="https://..."><button type="button" class="button branch-social-remove">—</button>';
					document.getElementById('branch-social-repeater').appendChild(d);
				});
				document.addEventListener('click', function(e){
					if(e.target.classList.contains('branch-social-remove')) e.target.parentElement.remove();
				});
				</script>
			</div>

			<?php submit_button('Сохранить настройки филиала'); ?>
		</form>
	</div>
	<?php
}

// ─────────────────────────────────────────────────────────────
// ACF: Отзывы (Лагерь) — группа полей
// ─────────────────────────────────────────────────────────────

