diff --git a/wp-content/themes/dekart/assets/css/page-teachers.css b/wp-content/themes/dekart/assets/css/page-teachers.css
new file mode 100644
index 0000000..e793caa
--- /dev/null
+++ b/wp-content/themes/dekart/assets/css/page-teachers.css
@@ -0,0 +1,382 @@
+/* ======================================================
+ * Страница "Преподаватели" (page-teachers.php) — Bento 2026
+ * Блоки: hero, intro, filter, cards, trust, faq, cta
+ * ====================================================== */
+
+/* ── Hero (по образцу главной ds-hero, компактнее) ── */
+.teachers-hero .ds-hero__inner {
+ gap: var(--space-5, 40px);
+ padding: 0;
+}
+.teachers-hero .ds-hero__visual {
+ width: 340px;
+}
+.teachers-hero .ds-hero__photo-frame {
+ width: 280px;
+ height: 280px;
+}
+.teachers-hero .ds-hero__photo-ring {
+ width: 320px;
+ height: 320px;
+}
+.teachers-hero .ds-hero__subtitle {
+ max-width: 58ch;
+}
+.teachers-hero .ds-hero__year {
+ color: #60A5FA;
+ font-weight: 800;
+ white-space: nowrap;
+ text-shadow: 0 0 6px rgba(96, 165, 250, 0.3);
+}
+.teachers-hero .ds-hero__address {
+ margin-bottom: var(--space-3, 16px);
+}
+.teachers-hero .ds-hero__h1 {
+ margin-bottom: var(--space-3, 16px);
+}
+.teachers-hero .ds-hero__assurance {
+ display: flex;
+ flex-wrap: wrap;
+ gap: var(--space-2, 8px);
+ margin-top: 12px;
+ margin-bottom: 8px;
+}
+.teachers-hero .ds-hero__assurance-item {
+ font-size: 14px;
+ color: rgba(255, 255, 255, 0.80);
+ display: inline-flex;
+ align-items: center;
+ gap: 4px;
+}
+.teachers-hero .ds-hero__assurance-item::before {
+ content: '✓';
+ color: #4ADE80;
+ font-weight: 700;
+ font-size: 11px;
+}
+
+/* ── Введение (SEO) ── */
+.teachers-intro {
+ padding: var(--space-6, 48px) 0;
+ background: var(--color-bg, #FFFFFF);
+}
+.teachers-intro .section-header--left {
+ text-align: left;
+}
+.teachers-intro .bento-h2,
+.teachers-intro .bento-p {
+ max-width: none;
+ margin-left: 0;
+ margin-right: auto;
+}
+.teachers-intro .bento-p {
+ max-width: 70ch;
+}
+
+/* ── Фильтр ── */
+.teachers-filter-wrap {
+ padding: 0 0 var(--space-5, 40px);
+ background: var(--color-bg, #FFFFFF);
+}
+.teachers-filter {
+ display: flex;
+ flex-wrap: wrap;
+ align-items: center;
+ gap: var(--space-3, 16px);
+}
+.teachers-filter__title {
+ font-size: 0.9375rem;
+ font-weight: 600;
+ color: var(--color-text-muted, #475569);
+ white-space: nowrap;
+}
+.teachers-filter__buttons {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 10px;
+}
+.teachers-filter__btn {
+ padding: 8px 20px;
+ border: 1px solid var(--color-border, #E2E8F0);
+ border-radius: var(--radius-pill, 100px);
+ background: var(--color-bg, #FFFFFF);
+ color: var(--color-text, #1E293B);
+ font-size: 0.9375rem;
+ font-weight: 600;
+ line-height: 1.2;
+ cursor: pointer;
+ transition: background .2s, color .2s, border-color .2s;
+}
+.teachers-filter__btn:hover {
+ border-color: var(--color-primary, #2563EB);
+ color: var(--color-primary, #2563EB);
+}
+.teachers-filter__btn.is-active {
+ background: var(--color-primary, #2563EB);
+ border-color: var(--color-primary, #2563EB);
+ color: #FFFFFF;
+}
+
+/* ── Карточки ── */
+.teachers-cards {
+ padding: 0 0 var(--space-6, 48px);
+ background: var(--color-bg, #FFFFFF);
+}
+.teachers-cards__grid {
+ display: grid;
+ grid-template-columns: repeat(3, minmax(0, 1fr));
+ gap: clamp(16px, 2vw, 24px);
+}
+.teachers-card {
+ display: flex;
+ flex-direction: column;
+ background: var(--color-bg-card, #FFFFFF);
+ border: 1px solid var(--color-border, #E2E8F0);
+ border-radius: var(--radius-lg, 24px);
+ overflow: hidden;
+ transition: box-shadow .25s, transform .25s, border-color .25s;
+}
+.teachers-card:hover {
+ box-shadow: var(--shadow-md, 0 8px 24px rgba(15, 23, 42, .08));
+ transform: translateY(-3px);
+ border-color: rgba(37, 99, 235, .35);
+}
+.teachers-card.is-hidden {
+ display: none;
+}
+.teachers-card__media {
+ position: relative;
+ aspect-ratio: 1 / 1;
+ overflow: hidden;
+ background: var(--color-primary-light, #EFF6FF);
+}
+.teachers-card__photo {
+ width: 100%;
+ height: 100%;
+ object-fit: cover;
+ display: block;
+}
+.teachers-card__badge {
+ position: absolute;
+ left: 12px;
+ bottom: 12px;
+ max-width: calc(100% - 24px);
+ padding: 6px 14px;
+ border-radius: var(--radius-pill, 100px);
+ background: rgba(255, 255, 255, .92);
+ color: var(--color-primary, #2563EB);
+ font-size: 0.8125rem;
+ font-weight: 700;
+ line-height: 1.3;
+ box-shadow: 0 2px 8px rgba(15, 23, 42, .1);
+}
+.teachers-card__body {
+ display: flex;
+ flex-direction: column;
+ gap: var(--space-2, 8px);
+ padding: var(--space-4, 24px);
+ flex: 1;
+}
+.teachers-card__name {
+ font-family: var(--font-display, inherit);
+ font-size: clamp(1.125rem, 1.6vw, 1.375rem);
+ font-weight: 700;
+ line-height: 1.25;
+ margin: 0;
+}
+.teachers-card__direction {
+ font-size: 0.9375rem;
+ font-weight: 600;
+ color: var(--color-primary, #2563EB);
+}
+.teachers-card__tenure {
+ font-size: 0.875rem;
+ color: var(--color-text, #1E293B);
+}
+.teachers-card__rating {
+ display: flex;
+ align-items: center;
+ gap: 8px;
+ margin-top: auto;
+ padding-top: var(--space-2, 8px);
+}
+.teachers-card__stars {
+ display: inline-flex;
+ gap: 2px;
+ color: var(--color-border, #CBD5E1);
+}
+.teachers-card__star.is-filled {
+ color: #F59E0B;
+}
+.teachers-card__rating-num {
+ font-size: 0.875rem;
+ font-weight: 700;
+ color: var(--color-text-muted, #475569);
+}
+.teachers-card__actions {
+ display: flex;
+ flex-direction: column;
+ gap: 10px;
+ margin-top: var(--space-2, 8px);
+}
+.teachers-card__btn {
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ width: 100%;
+ padding: 12px 20px;
+ border: none;
+ border-radius: var(--radius-pill, 100px);
+ background: var(--color-primary, #2563EB);
+ color: #FFFFFF;
+ font-size: 0.9375rem;
+ font-weight: 700;
+ line-height: 1.2;
+ text-decoration: none;
+ cursor: pointer;
+ transition: background .2s;
+}
+.teachers-card__btn:hover {
+ background: var(--color-primary-dark, #1D4ED8);
+ color: #FFFFFF;
+}
+.teachers-card__link {
+ display: inline-block;
+ text-align: center;
+ font-size: 0.875rem;
+ font-weight: 600;
+ color: var(--color-primary, #2563EB);
+ text-decoration: none;
+ transition: color .2s;
+}
+.teachers-card__link:hover {
+ color: var(--color-primary-dark, #1D4ED8);
+ text-decoration: underline;
+}
+
+/* ── Блок доверия ── */
+.teachers-trust {
+ padding: var(--space-5, 40px) 0;
+ background: var(--color-surface-soft, #F8FAFC);
+}
+.teachers-trust__grid {
+ display: grid;
+ grid-template-columns: repeat(3, minmax(0, 1fr));
+ gap: clamp(16px, 2vw, 24px);
+}
+.teachers-trust__item {
+ text-align: center;
+ padding: var(--space-4, 24px);
+ border-radius: var(--radius-lg, 24px);
+ background: var(--color-bg, #FFFFFF);
+ box-shadow: var(--shadow-sm, 0 2px 12px rgba(15, 23, 42, .05));
+}
+.teachers-trust__number {
+ font-family: var(--font-display, inherit);
+ font-size: clamp(1.875rem, 3.5vw, 2.75rem);
+ font-weight: 700;
+ line-height: 1.1;
+ color: var(--color-primary, #2563EB);
+ margin-bottom: 6px;
+}
+.teachers-trust__label {
+ font-size: 0.9375rem;
+ line-height: 1.5;
+ color: var(--color-text-muted, #475569);
+}
+
+/* ── FAQ ── */
+.teachers-faq {
+ padding: var(--space-6, 48px) 0;
+ background: var(--color-bg, #FFFFFF);
+}
+
+/* ── CTA ── */
+.teachers-cta {
+ padding: var(--space-6, 48px) 0;
+ background: var(--color-primary-light, #EFF6FF);
+}
+.teachers-cta__inner {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ gap: var(--space-4, 24px);
+ text-align: center;
+}
+.teachers-cta__btn {
+ display: inline-flex;
+ align-items: center;
+ gap: 10px;
+ padding: 14px 28px;
+ border: none;
+ border-radius: var(--radius-pill, 100px);
+ background: var(--color-primary, #2563EB);
+ color: #FFFFFF;
+ font-size: 1rem;
+ font-weight: 700;
+ cursor: pointer;
+ transition: background .2s;
+}
+.teachers-cta__btn:hover {
+ background: var(--color-primary-dark, #1D4ED8);
+}
+.teachers-cta__btn svg {
+ flex: none;
+}
+
+/* ── Адаптив ── */
+@media (max-width: 1024px) {
+ .teachers-cards__grid {
+ grid-template-columns: repeat(2, minmax(0, 1fr));
+ }
+}
+
+@media (max-width: 768px) {
+ .teachers-hero .ds-hero__photo-frame {
+ width: 220px;
+ height: 220px;
+ }
+ .teachers-hero .ds-hero__photo-ring {
+ width: 250px;
+ height: 250px;
+ }
+ .teachers-hero .ds-hero__visual {
+ width: 100%;
+ margin: 0;
+ }
+ .teachers-intro,
+ .teachers-cards,
+ .teachers-faq {
+ padding: var(--space-4, 24px) 0;
+ }
+ .teachers-trust,
+ .teachers-cta {
+ padding: var(--space-4, 24px) 0;
+ }
+ .teachers-cards__grid {
+ grid-template-columns: 1fr;
+ }
+ .teachers-trust__grid {
+ grid-template-columns: 1fr;
+ }
+ .teachers-filter {
+ flex-direction: column;
+ align-items: flex-start;
+ }
+ .teachers-filter__buttons {
+ width: 100%;
+ }
+ .teachers-filter__btn {
+ flex: 1 1 auto;
+ text-align: center;
+ }
+}
+
+@media (prefers-reduced-motion: reduce) {
+ .teachers-card {
+ transition: none;
+ }
+ .teachers-card:hover {
+ transform: none;
+ }
+}
\ No newline at end of file
diff --git a/wp-content/themes/dekart/assets/js/page-teachers.js b/wp-content/themes/dekart/assets/js/page-teachers.js
new file mode 100644
index 0000000..c2ad517
--- /dev/null
+++ b/wp-content/themes/dekart/assets/js/page-teachers.js
@@ -0,0 +1,55 @@
+/**
+ * Страница "Преподаватели" — фильтр карточек + reveal-анимации.
+ * Фильтры читаются из кнопок .teachers-filter__btn[data-filter],
+ * карточки фильтруются по .teachers-card[data-category].
+ */
+(function () {
+ 'use strict';
+
+ // ── Reveal-анимации (как на главной/школе) ──
+ var sections = document.querySelectorAll('.page-teachers .reveal');
+ if (sections.length && 'IntersectionObserver' in window) {
+ var observer = new IntersectionObserver(function (entries) {
+ entries.forEach(function (entry) {
+ if (entry.isIntersecting) {
+ entry.target.classList.add('is-visible');
+ observer.unobserve(entry.target);
+ }
+ });
+ }, { threshold: 0.12 });
+
+ sections.forEach(function (el) {
+ observer.observe(el);
+ });
+ }
+
+ // ── Фильтр карточек ──
+ var filterWrap = document.querySelector('.teachers-filter');
+ var grid = document.getElementById('teachers-grid');
+ if (!filterWrap || !grid) {
+ return;
+ }
+
+ var buttons = filterWrap.querySelectorAll('.teachers-filter__btn');
+ var cards = grid.querySelectorAll('.teachers-card');
+
+ function applyFilter(slug) {
+ buttons.forEach(function (btn) {
+ var isActive = btn.getAttribute('data-filter') === slug;
+ btn.classList.toggle('is-active', isActive);
+ btn.setAttribute('aria-pressed', isActive ? 'true' : 'false');
+ });
+
+ cards.forEach(function (card) {
+ var cat = card.getAttribute('data-category') || 'all';
+ var visible = (slug === 'all' || cat === slug || cat === 'all');
+ card.classList.toggle('is-hidden', !visible);
+ });
+ }
+
+ buttons.forEach(function (btn) {
+ btn.addEventListener('click', function () {
+ applyFilter(btn.getAttribute('data-filter') || 'all');
+ });
+ });
+})();
\ No newline at end of file
diff --git a/wp-content/themes/dekart/front-page.php b/wp-content/themes/dekart/front-page.php
index a17cbce..f6ca5aa 100644
--- a/wp-content/themes/dekart/front-page.php
+++ b/wp-content/themes/dekart/front-page.php
@@ -373,7 +373,7 @@ $faq_has = ! empty($front_faq) && is_array($front_faq);
Остались вопросы?
- Позвоните — расскажем о школе и запишем на экскурсию
+ Позвоните — расскажем о школе и запишем ребёнка на обучение
diff --git a/wp-content/themes/dekart/functions.php b/wp-content/themes/dekart/functions.php
index 34c2799..e160569 100644
--- a/wp-content/themes/dekart/functions.php
+++ b/wp-content/themes/dekart/functions.php
@@ -752,6 +752,20 @@ function add_carbon()
'icon-certificate' => '📜 Сертификат',
);
+ // Категории фильтра для карточки преподавателя (из таксономии trainingCategory)
+ $teacher_category_options = array(
+ '' => '— Без категории —',
+ );
+ $teacher_cats = get_terms(array(
+ 'taxonomy' => 'trainingCategory',
+ 'hide_empty' => false,
+ ));
+ if (! is_wp_error($teacher_cats) && ! empty($teacher_cats)) {
+ foreach ($teacher_cats as $teacher_cat) {
+ $teacher_category_options[ $teacher_cat->slug ] = $teacher_cat->name;
+ }
+ }
+
// Иконки для плашек hero — только из SVG-спрайта (use href="#icon-*")
$school_hero_float_icons = array(
'teacher' => '👨🏫 Учитель',
@@ -1484,6 +1498,10 @@ function add_carbon()
))
->help_text('В списке указаны все возможные категрии в обучении, выберите необходимые'),
)),
+ Field::make('select', 'teacher_category', 'Категория для фильтра на странице преподавателей')
+ ->set_width(50)
+ ->set_options($teacher_category_options)
+ ->set_help_text('Значение должно совпадать со slug фильтра на странице преподавателей. Пусто — карточка видна только во «Все».'),
Field::make('complex', 'certificates', 'Дипломы и сертификаты')
->set_layout('tabbed-horizontal')
->add_fields(array(
@@ -1503,6 +1521,84 @@ function add_carbon()
)),
));
+ // ====================================================
+ // Доп поля для страницы "Преподаватели" (Bento 2026)
+ // ====================================================
+ Container::make('post_meta', '📚 Настройки страницы Преподаватели')
+ ->where('post_template', '=', 'page-teachers.php')
+ ->add_tab('🖼️ Введение (SEO)', array(
+ Field::make('html', 'teachers_intro_tab_desc', '')
+ ->set_html('Блок под баннером. H1 берётся из баннера (banner_h1), здесь — вводный текст с гео-ключами.
'),
+ Field::make('textarea', 'banner_text', 'Подзаголовок в баннере (под H1)')
+ ->set_width(100)
+ ->set_help_text('1–2 предложения: направления школы и гео-ключи.'),
+ Field::make('textarea', 'teachers_intro_title', 'Заголовок блока')
+ ->set_default_value('Преподаватели школы «Декарт» в Щёлково')
+ ->set_help_text('Второй заголовок с ключевым запросом.'),
+ Field::make('textarea', 'teachers_intro_text', 'Вводный текст')
+ ->set_help_text('2–4 предложения: сколько учителей, какие направления закрывают, первое вхождение гео-ключей.'),
+ ))
+ ->add_tab('🔍 Фильтры', array(
+ Field::make('html', 'teachers_filters_tab_desc', '')
+ ->set_html('Фильтр карточек преподавателей. Динамический: какие фильтры добавлены — такие и выводятся, в этом порядке. Карточки получают категорию из поля «Категория» на странице преподавателя.
'),
+ Field::make('text', 'teachers_filters_title', 'Заголовок секции фильтров')
+ ->set_default_value('Выберите направление')
+ ->set_width(100),
+ Field::make('complex', 'teachers_filters', 'Фильтры')
+ ->set_layout('tabbed-horizontal')
+ ->set_help_text('Добавьте нужные фильтры в нужном порядке. Пример: Начальная школа, Подготовка к школе, Продлёнка, Летний лагерь.')
+ ->add_fields(array(
+ Field::make('text', 'filter_label', 'Название фильтра')
+ ->set_width(60)
+ ->set_required(true)
+ ->set_help_text('Показывается на кнопке. Пример: «Начальная школа».'),
+ Field::make('text', 'filter_slug', 'Slug (техническое имя)')
+ ->set_width(40)
+ ->set_help_text('Латинскими буквами, без пробелов. Пример: nachalnaya-shkola. Должен совпадать со значением поля «Категория» у карточки преподавателя.'),
+ )),
+ ))
+ ->add_tab('📊 Блок доверия', array(
+ Field::make('html', 'teachers_trust_tab_desc', '')
+ ->set_html('Цифры под карточками: стаж, категория, текучка, соотношение учитель/ученик. Показывается, если добавлены данные.
'),
+ Field::make('complex', 'teachers_trust', 'Цифры')
+ ->set_layout('tabbed-horizontal')
+ ->set_help_text('Добавьте 2–4 цифры. Пример: «10+» / «лет средний стаж», «70%» / «учителей с высшей категорией».')
+ ->add_fields(array(
+ Field::make('text', 'trust_number', 'Число')
+ ->set_width(30)
+ ->set_help_text('Пример: 10+, 70%, 1:15'),
+ Field::make('text', 'trust_label', 'Подпись')
+ ->set_width(70)
+ ->set_help_text('Пример: лет средний стаж'),
+ )),
+ ))
+ ->add_tab('🎓 FAQ', array(
+ Field::make('html', 'teachers_faq_tab_desc', '')
+ ->set_html('Частые вопросы про учителей. Из полей строится FAQPage JSON-LD. Показывается, если есть вопросы.
'),
+ Field::make('complex', 'teachers_faq', 'Вопросы и ответы')
+ ->set_layout('tabbed-horizontal')
+ ->add_fields(array(
+ Field::make('textarea', 'faq_question', 'Вопрос')
+ ->set_width(35)
+ ->set_required(true),
+ Field::make('textarea', 'faq_answer', 'Ответ')
+ ->set_width(65)
+ ->set_required(true),
+ )),
+ ))
+ ->add_tab('🤝 CTA', array(
+ Field::make('html', 'teachers_cta_tab_desc', '')
+ ->set_html('Блок перед формой записи. Форма записи и карта — общие, не трогаются.
'),
+ Field::make('text', 'teachers_cta_title', 'Заголовок')
+ ->set_default_value('Познакомьтесь с педагогами лично')
+ ->set_width(100),
+ Field::make('textarea', 'teachers_cta_text', 'Текст')
+ ->set_default_value('Запишитесь на экскурсию или пробный день — увидите, как проходят занятия, и зададите вопросы учителям напрямую.'),
+ Field::make('text', 'teachers_cta_btn', 'Текст кнопки')
+ ->set_default_value('Записаться на экскурсию')
+ ->set_help_text('Кнопка открывает форму записи (та же, что ниже).'),
+ ));
+
// ====================================================
// Доп поля для страницы "Подготовка к школе (Bento 2026)"
// ====================================================
@@ -2607,6 +2703,21 @@ function enqueue_template_specific_styles()
true
);
}
+ if (is_page_template('page-teachers.php')) {
+ wp_enqueue_style(
+ 'teachers-page-style',
+ get_template_directory_uri() . '/assets/css/page-teachers.css',
+ array(),
+ filemtime(get_template_directory() . '/assets/css/page-teachers.css')
+ );
+ wp_enqueue_script(
+ 'teachers-page-script',
+ get_template_directory_uri() . '/assets/js/page-teachers.js',
+ array(),
+ filemtime(get_template_directory() . '/assets/js/page-teachers.js'),
+ true
+ );
+ }
if (is_page_template('page-after-school.php')) {
wp_enqueue_style(
'template-after-style',
diff --git a/wp-content/themes/dekart/page-teachers.php b/wp-content/themes/dekart/page-teachers.php
index c264b55..328287e 100644
--- a/wp-content/themes/dekart/page-teachers.php
+++ b/wp-content/themes/dekart/page-teachers.php
@@ -9,7 +9,9 @@ $post_id = get_the_ID();
?>
-
+
+
+
@@ -19,11 +21,21 @@ $post_id = get_the_ID();
-
+
-
+
-
+
+
+
+
+
+
+
+
+
+
+
diff --git a/wp-content/themes/dekart/template-parts/contacts.php b/wp-content/themes/dekart/template-parts/contacts.php
index af7a8d1..00c6650 100644
--- a/wp-content/themes/dekart/template-parts/contacts.php
+++ b/wp-content/themes/dekart/template-parts/contacts.php
@@ -166,7 +166,7 @@ if (empty($opt_social) || ! is_array($opt_social)) {
diff --git a/wp-content/themes/dekart/template-parts/cta-consultation.php b/wp-content/themes/dekart/template-parts/cta-consultation.php
index e794f4a..5d82b4d 100644
--- a/wp-content/themes/dekart/template-parts/cta-consultation.php
+++ b/wp-content/themes/dekart/template-parts/cta-consultation.php
@@ -26,7 +26,7 @@ $cta_phone_clean = $cta_phone ? preg_replace('/[\s\-\–\(\)]/', '', $cta_phone)
Познакомитесь с педагогами, увидите классы и получите персональную консультацию по обучению. Это бесплатно и ничего не обязывает.
- Записаться на бесплатную экскурсию
+ Записаться в школу
@@ -35,7 +35,7 @@ $cta_phone_clean = $cta_phone ? preg_replace('/[\s\-\–\(\)]/', '', $cta_phone)
-
+
diff --git a/wp-content/themes/dekart/template-parts/teachers/cards.php b/wp-content/themes/dekart/template-parts/teachers/cards.php
new file mode 100644
index 0000000..fb6274b
--- /dev/null
+++ b/wp-content/themes/dekart/template-parts/teachers/cards.php
@@ -0,0 +1,107 @@
+ -1,
+ 'orderby' => 'date',
+ 'order' => 'ASC',
+ 'post_type' => 'teacher',
+ 'post_status' => 'publish',
+ 'no_found_rows' => true,
+ 'update_post_meta_cache' => true,
+ 'update_post_term_cache' => true,
+);
+
+$teachers_list = get_posts($teachers_args);
+if (empty($teachers_list)) {
+ return;
+}
+
+$current_year = (int) current_time('Y');
+?>
+
+
+
+ ID;
+ $full_name = get_the_title($tid);
+ $cat = carbon_get_post_meta($tid, 'teacher_category');
+ $direction = carbon_get_post_meta($tid, 'teacher_direction');
+ $badge = carbon_get_post_meta($tid, 'teacher_badge');
+ $start_year = carbon_get_post_meta($tid, 'teacher_start_year');
+ $rating = carbon_get_post_meta($tid, 'teacher_rating');
+ $avatar_id = carbon_get_post_meta($tid, 'teacher_avatar');
+ $avatar_url = $avatar_id ? wp_get_attachment_url($avatar_id) : '';
+ $alt_text = $avatar_id ? get_post_meta($avatar_id, '_wp_attachment_image_alt', true) : $full_name;
+
+ $tenure = '';
+ if ($start_year && absint($start_year) > 1900) {
+ $tenure = max(0, (int) $current_year - (int) $start_year);
+ }
+
+ $cat_filter = ! empty($cat) ? $cat : 'all';
+ ?>
+
+
+
+
+
+
+
+
+
+
+
+
Стаж: лет
+
+
+
+ 0) : ?>
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/wp-content/themes/dekart/template-parts/teachers/cta.php b/wp-content/themes/dekart/template-parts/teachers/cta.php
new file mode 100644
index 0000000..d2d9f79
--- /dev/null
+++ b/wp-content/themes/dekart/template-parts/teachers/cta.php
@@ -0,0 +1,43 @@
+
+
\ No newline at end of file
diff --git a/wp-content/themes/dekart/template-parts/teachers/faq.php b/wp-content/themes/dekart/template-parts/teachers/faq.php
new file mode 100644
index 0000000..d78c245
--- /dev/null
+++ b/wp-content/themes/dekart/template-parts/teachers/faq.php
@@ -0,0 +1,75 @@
+ $q, 'a' => $a );
+}
+
+if (empty($faq_items)) {
+ return;
+}
+?>
+
+
+
+
+
+ $fi) : ?>
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/wp-content/themes/dekart/template-parts/teachers/filter.php b/wp-content/themes/dekart/template-parts/teachers/filter.php
new file mode 100644
index 0000000..5deba9f
--- /dev/null
+++ b/wp-content/themes/dekart/template-parts/teachers/filter.php
@@ -0,0 +1,58 @@
+ 'Все преподаватели', 'filter_slug' => 'all' ));
+foreach ($filters as $f) {
+ $label = $f['filter_label'] ?? '';
+ $slug = $f['filter_slug'] ?? '';
+ if (! $label || ! $slug) {
+ continue;
+ }
+ $filters_list[] = array( 'filter_label' => $label, 'filter_slug' => $slug );
+}
+
+if (count($filters_list) < 2) {
+ return;
+}
+?>
+
+
+
+
:
+
+ $f) :
+ $is_active = (0 === $i); ?>
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/wp-content/themes/dekart/template-parts/teachers/hero.php b/wp-content/themes/dekart/template-parts/teachers/hero.php
new file mode 100644
index 0000000..a94517b
--- /dev/null
+++ b/wp-content/themes/dekart/template-parts/teachers/hero.php
@@ -0,0 +1,111 @@
+ 'teacher',
+ 'post_status' => 'publish',
+ 'posts_per_page' => 1,
+ 'orderby' => 'date',
+ 'order' => 'ASC',
+ 'no_found_rows' => true,
+));
+
+$hero_photo = '';
+$hero_alt = 'Преподаватели школы «' . esc_html($branch_name) . '» ' . esc_html($branch_city);
+if (! empty($first_teacher)) {
+ $first_tid = (int) $first_teacher[0]->ID;
+ $av_id = carbon_get_post_meta($first_tid, 'teacher_avatar');
+ if ($av_id) {
+ $hero_photo = wp_get_attachment_url($av_id);
+ $alt_meta = get_post_meta($av_id, '_wp_attachment_image_alt', true);
+ if ($alt_meta) {
+ $hero_alt = $alt_meta;
+ }
+ }
+}
+
+// ─── Статистика (кратко) ───
+$hero_stats = array(
+ array( 'num' => '12', 'label' => 'педагогов' ),
+ array( 'num' => '10+', 'label' => 'лет средний стаж' ),
+);
+?>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Наши преподаватели
+
+
Команда педагогов школы «» : начальная школа, средняя школа, подготовка к школе, продлёнка и летний лагерь. Средний стаж — от 10 лет. Открыт набор на учебный год.
+
+
+ Записаться на экскурсию
+
+
+
+
+
+
+ Познакомитесь с учителями лично
+ Зададите вопросы напрямую
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/wp-content/themes/dekart/template-parts/teachers/intro.php b/wp-content/themes/dekart/template-parts/teachers/intro.php
new file mode 100644
index 0000000..5ca5f65
--- /dev/null
+++ b/wp-content/themes/dekart/template-parts/teachers/intro.php
@@ -0,0 +1,33 @@
+
+
\ No newline at end of file
diff --git a/wp-content/themes/dekart/template-parts/teachers/schema.php b/wp-content/themes/dekart/template-parts/teachers/schema.php
new file mode 100644
index 0000000..8b0f60b
--- /dev/null
+++ b/wp-content/themes/dekart/template-parts/teachers/schema.php
@@ -0,0 +1,108 @@
+ 'Person',
+ 'name' => $founder_name,
+ 'jobTitle' => $head_q ?: 'Учредитель школы «Декарт»',
+ 'worksFor' => array( '@type' => 'EducationalOrganization', 'name' => $org_name ),
+ );
+}
+
+// Педагоги из CPT teacher
+$schema_args = array(
+ 'posts_per_page' => -1,
+ 'post_type' => 'teacher',
+ 'post_status' => 'publish',
+ 'orderby' => 'date',
+ 'order' => 'ASC',
+ 'no_found_rows' => true,
+ 'update_post_meta_cache' => true,
+);
+$schema_teachers = get_posts($schema_args);
+
+foreach ($schema_teachers as $st) {
+ $tid = (int) $st->ID;
+ $subj = carbon_get_post_meta($tid, 'teacher_direction');
+ $ed = carbon_get_post_meta($tid, 'teacher_education');
+ $img = carbon_get_post_meta($tid, 'teacher_avatar');
+
+ // Чистый текст, обрезанный для schema description
+ $schema_desc = '';
+ if ($ed) {
+ $schema_desc = wp_strip_all_tags($ed);
+ $schema_desc = preg_replace('/\s+/u', ' ', $schema_desc);
+ $schema_desc = trim($schema_desc);
+ if (mb_strlen($schema_desc) > 200) {
+ $schema_desc = mb_substr($schema_desc, 0, 197) . '…';
+ }
+ }
+
+ $person = array(
+ '@type' => 'Person',
+ 'name' => get_the_title($tid),
+ 'url' => get_permalink($tid),
+ 'jobTitle' => $subj ?: 'Преподаватель',
+ 'worksFor' => array( '@type' => 'EducationalOrganization', 'name' => $org_name ),
+ 'description' => $schema_desc,
+ );
+ if ($img && wp_get_attachment_url($img)) {
+ $person['image'] = wp_get_attachment_url($img);
+ }
+ $teachers_schema[] = $person;
+}
+
+if (empty($teachers_schema)) {
+ return;
+}
+
+$org_schema = array(
+ '@type' => 'EducationalOrganization',
+ 'name' => $org_name,
+ 'url' => $org_url,
+);
+if ($org_logo) {
+ $org_schema['logo'] = $org_logo;
+}
+if ($org_addr) {
+ $org_schema['address'] = $org_addr;
+}
+if ($org_phone) {
+ $org_schema['telephone'] = $org_phone;
+}
+$org_schema['employee'] = $teachers_schema;
+?>
+
\ No newline at end of file
diff --git a/wp-content/themes/dekart/template-parts/teachers/trust.php b/wp-content/themes/dekart/template-parts/teachers/trust.php
new file mode 100644
index 0000000..f848586
--- /dev/null
+++ b/wp-content/themes/dekart/template-parts/teachers/trust.php
@@ -0,0 +1,46 @@
+ $num, 'label' => $label );
+}
+
+if (empty($trust_items)) {
+ return;
+}
+?>
+
\ No newline at end of file