From 545644682d62a36293a91ae8c86dfc1b75843190 Mon Sep 17 00:00:00 2001 From: Dekart Deploy Bot Date: Tue, 8 Sep 2026 18:38:27 +0000 Subject: [PATCH] =?UTF-8?q?2026-09-08=20=D0=9D=D0=B0=D1=88=D0=B8=20=D0=BF?= =?UTF-8?q?=D1=80=D0=B5=D0=BF=D0=BE=D0=B4=D0=B0=D0=B2=D1=82=D0=B5=D0=BB?= =?UTF-8?q?=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dekart/assets/css/page-teachers.css | 382 ++++++++++++++++++ .../themes/dekart/assets/js/page-teachers.js | 55 +++ wp-content/themes/dekart/front-page.php | 2 +- wp-content/themes/dekart/functions.php | 111 +++++ wp-content/themes/dekart/page-teachers.php | 20 +- .../themes/dekart/template-parts/contacts.php | 2 +- .../template-parts/cta-consultation.php | 4 +- .../dekart/template-parts/teachers/cards.php | 107 +++++ .../dekart/template-parts/teachers/cta.php | 43 ++ .../dekart/template-parts/teachers/faq.php | 75 ++++ .../dekart/template-parts/teachers/filter.php | 58 +++ .../dekart/template-parts/teachers/hero.php | 111 +++++ .../dekart/template-parts/teachers/intro.php | 33 ++ .../dekart/template-parts/teachers/schema.php | 108 +++++ .../dekart/template-parts/teachers/trust.php | 46 +++ 15 files changed, 1149 insertions(+), 8 deletions(-) create mode 100644 wp-content/themes/dekart/assets/css/page-teachers.css create mode 100644 wp-content/themes/dekart/assets/js/page-teachers.js create mode 100644 wp-content/themes/dekart/template-parts/teachers/cards.php create mode 100644 wp-content/themes/dekart/template-parts/teachers/cta.php create mode 100644 wp-content/themes/dekart/template-parts/teachers/faq.php create mode 100644 wp-content/themes/dekart/template-parts/teachers/filter.php create mode 100644 wp-content/themes/dekart/template-parts/teachers/hero.php create mode 100644 wp-content/themes/dekart/template-parts/teachers/intro.php create mode 100644 wp-content/themes/dekart/template-parts/teachers/schema.php create mode 100644 wp-content/themes/dekart/template-parts/teachers/trust.php 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)

Познакомитесь с педагогами, увидите классы и получите персональную консультацию по обучению. Это бесплатно и ничего не обязывает.

-

Бесплатная экскурсия · 30 минут · Без обязательств

+

Запишитесь на обучение · Перезвоним за 15 минут · Без обязательств

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'; + ?> + + +
+
+
\ 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; +} +?> +
+
+
+ FAQ +

Вопросы о преподавателях

+

Как мы знакомим детей с учителями и почему команда годами остаётся стабильной

+
+ +
+ $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 лет. Открыт набор на учебный год.

+ + + + +
+ Познакомитесь с учителями лично + Зададите вопросы напрямую +
+
+ +
+ +
+
+ <?php echo esc_attr($hero_alt); ?> +
+ +
+ +
+ +
+
+
\ 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