Files
klient-prav.ru/wp-content/themes/clientprav-theme/single.php
Fedor 4394550ff1 feat: улучшения формы и отображение case_taxonomy
- Добавлено отображение case_taxonomy вместо 'Разобрались' на странице кейса
- Улучшена интеграция iframe формы с обработкой событий
- Добавлен лог диалога по интеграции React формы
2025-12-16 11:40:31 +03:00

382 lines
23 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
/**
* Шаблон одиночной записи
*
* @package Clientprav
*/
get_header();
?>
<div class="min-h-screen bg-gray-50 pt-24 pb-16">
<div class="max-w-6xl mx-auto px-4 sm:px-6">
<!-- Навигация назад -->
<?php
$categories = get_the_category();
$category_slug = !empty($categories) ? $categories[0]->slug : '';
if ($category_slug) :
?>
<a href="<?php echo esc_url(clientprav_get_category_link($category_slug)); ?>"
class="text-gray-600 hover:text-gray-900 mb-8 inline-flex items-center gap-2 transition-colors">
<svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 19l-7-7 7-7"></path>
</svg>
Назад к списку
</a>
<?php endif; ?>
<article id="post-<?php the_ID(); ?>" <?php post_class('max-w-4xl mx-auto'); ?>>
<header class="mb-8">
<!-- Категория Badge -->
<?php
$categories = get_the_category();
$category_name = !empty($categories) ? $categories[0]->name : '';
// Для кейсов используем case_taxonomy вместо названия категории
if (has_category('cases')) {
$case_taxonomy = clientprav_get_case_taxonomy(get_the_ID());
if (!empty($case_taxonomy)) {
$category_name = $case_taxonomy;
}
}
if (!empty($category_name)) :
?>
<div class="mb-4">
<span class="text-sm <?php echo has_category('cases') ? 'bg-blue-100 text-blue-700' : 'bg-blue-50 text-blue-600'; ?> px-4 py-1.5 rounded-full">
<?php echo esc_html($category_name); ?>
</span>
</div>
<?php endif; ?>
<h1 class="text-5xl text-gray-900 mb-6 leading-tight">
<?php the_title(); ?>
</h1>
<!-- Мета-информация -->
<?php if (has_category('news')) : ?>
<div class="flex items-center justify-between mb-8 pb-6 border-b border-gray-200">
<div class="flex items-center gap-6 text-gray-600">
<div class="flex items-center gap-2">
<svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z"></path>
</svg>
<span><?php echo get_the_date('d F Y'); ?></span>
</div>
<div>Автор: <?php the_author(); ?></div>
<?php
$reading_time = get_post_meta(get_the_ID(), 'reading_time', true);
if (empty($reading_time)) {
$content = get_the_content();
$word_count = str_word_count(strip_tags($content));
$reading_time = max(1, round($word_count / 200)); // 200 слов в минуту
}
?>
<div><?php echo $reading_time; ?> мин чтения</div>
</div>
<!-- Кнопка "Поделиться" -->
<div class="relative">
<button id="share-btn" class="flex items-center gap-2 text-gray-600 hover:text-blue-600 transition-colors">
<svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8.684 13.342C8.886 12.938 9 12.482 9 12c0-.482-.114-.938-.316-1.342m0 2.684a3 3 0 110-2.684m0 2.684l6.632 3.316m-6.632-6l6.632-3.316m0 0a3 3 0 105.367-2.684 3 3 0 00-5.367 2.684zm0 9.316a3 3 0 105.368 2.684 3 3 0 00-5.368-2.684z"></path>
</svg>
Поделиться
</button>
<div id="share-menu" class="hidden absolute right-0 mt-2 bg-white border border-gray-200 rounded-xl shadow-lg p-2 min-w-[200px] z-10">
<a href="https://www.facebook.com/sharer/sharer.php?u=<?php echo urlencode(get_permalink()); ?>" target="_blank" class="w-full flex items-center gap-3 px-4 py-2 rounded-lg hover:bg-gray-50">
<svg class="w-5 h-5 text-blue-600" fill="currentColor" viewBox="0 0 24 24">
<path d="M24 12.073c0-6.627-5.373-12-12-12s-12 5.373-12 12c0 5.99 4.388 10.954 10.125 11.854v-8.385H7.078v-3.47h3.047V9.43c0-3.007 1.792-4.669 4.533-4.669 1.312 0 2.686.235 2.686.235v2.953H15.83c-1.491 0-1.956.925-1.956 1.874v2.25h3.328l-.532 3.47h-2.796v8.385C19.612 23.027 24 18.062 24 12.073z"/>
</svg>
<span>Facebook</span>
</a>
<a href="https://twitter.com/intent/tweet?url=<?php echo urlencode(get_permalink()); ?>&text=<?php echo urlencode(get_the_title()); ?>" target="_blank" class="w-full flex items-center gap-3 px-4 py-2 rounded-lg hover:bg-gray-50">
<svg class="w-5 h-5 text-sky-500" fill="currentColor" viewBox="0 0 24 24">
<path d="M23.953 4.57a10 10 0 01-2.825.775 4.958 4.958 0 002.163-2.723c-.951.555-2.005.959-3.127 1.184a4.92 4.92 0 00-8.384 4.482C7.69 8.095 4.067 6.13 1.64 3.162a4.822 4.822 0 00-.666 2.475c0 1.71.87 3.213 2.188 4.096a4.904 4.904 0 01-2.228-.616v.06a4.923 4.923 0 003.946 4.827 4.996 4.996 0 01-2.212.085 4.936 4.936 0 004.604 3.417 9.867 9.867 0 01-6.102 2.105c-.39 0-.779-.023-1.17-.067a13.995 13.995 0 007.557 2.209c9.053 0 13.998-7.496 13.998-13.985 0-.21 0-.42-.015-.63A9.935 9.935 0 0024 4.59z"/>
</svg>
<span>Twitter</span>
</a>
<a href="mailto:?subject=<?php echo urlencode(get_the_title()); ?>&body=<?php echo urlencode(get_permalink()); ?>" class="w-full flex items-center gap-3 px-4 py-2 rounded-lg hover:bg-gray-50">
<svg class="w-5 h-5 text-gray-600" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z"></path>
</svg>
<span>Email</span>
</a>
</div>
</div>
</div>
<?php elseif (has_category('cases')) : ?>
<div class="grid grid-cols-1 md:grid-cols-3 gap-6 mb-8 py-6 border-y border-gray-200">
<div class="flex items-center gap-2 text-gray-600">
<svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z"></path>
</svg>
<span>Дата решения: <?php echo get_the_date('d F'); ?></span>
</div>
<?php
$duration = get_post_meta(get_the_ID(), 'case_duration_days', true);
if (empty($duration)) {
$duration = get_post_meta(get_the_ID(), 'duration_days', true);
}
if (!empty($duration)) :
?>
<div class="flex items-center gap-2 text-gray-600">
<svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z"></path>
</svg>
<span>Срок: <?php echo esc_html($duration); ?> дней</span>
</div>
<?php endif; ?>
<?php
$result = clientprav_get_case_result(get_the_ID());
if (!empty($result)) :
?>
<div class="flex items-center gap-2 text-green-600">
<svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 7h8m0 0v8m0-8l-8 8-4-4-6 6"></path>
</svg>
<span class="font-semibold"><?php echo esc_html($result); ?></span>
</div>
<?php endif; ?>
</div>
<?php elseif (has_category('faq')) : ?>
<div class="flex items-center gap-6 mb-8 pb-6 border-b border-gray-200 text-gray-600">
<div>Юрист: <?php the_author(); ?></div>
<?php
$views = get_post_meta(get_the_ID(), 'faq_views_count', true);
if (empty($views)) {
$views = get_post_meta(get_the_ID(), 'views_count', true);
}
if (!empty($views)) :
?>
<div class="flex items-center gap-2">
<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 12a3 3 0 11-6 0 3 3 0 016 0z"></path>
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z"></path>
</svg>
<span><?php echo number_format($views, 0, ',', ' '); ?> просмотра</span>
</div>
<?php endif; ?>
<div><?php echo get_the_date('d F Y'); ?></div>
</div>
<?php endif; ?>
<?php if (has_post_thumbnail()) : ?>
<div class="aspect-video rounded-2xl overflow-hidden bg-gray-200 mb-10">
<?php the_post_thumbnail('large', array('class' => 'w-full h-full object-cover')); ?>
</div>
<?php endif; ?>
</header>
<!-- Контент статьи -->
<div class="prose prose-lg max-w-none mb-12">
<?php
the_content();
wp_link_pages(array(
'before' => '<div class="page-links">' . __('Страницы:', 'clientprav'),
'after' => '</div>',
));
?>
</div>
<?php if (has_category('cases')) : ?>
<?php
$problem = clientprav_get_case_problem(get_the_ID());
$result = clientprav_get_case_result(get_the_ID());
?>
<!-- Ситуация -->
<?php if ($problem) : ?>
<section class="mb-12">
<h2 class="text-3xl text-gray-900 mb-6">Ситуация</h2>
<div class="prose prose-lg max-w-none">
<?php echo wpautop(esc_html($problem)); ?>
</div>
</section>
<?php endif; ?>
<!-- Решение (временная шкала) -->
<?php
$timeline = get_post_meta(get_the_ID(), 'case_timeline', true);
if (empty($timeline)) {
$timeline = get_post_meta(get_the_ID(), 'timeline', true);
}
if (!empty($timeline) || $problem) :
?>
<section class="mb-12 bg-gray-50 rounded-2xl p-8">
<h2 class="text-3xl text-gray-900 mb-6">Как мы решали</h2>
<?php if (!empty($timeline) && is_array($timeline)) : ?>
<div class="space-y-4">
<?php foreach ($timeline as $index => $item) : ?>
<div class="flex gap-4">
<div class="flex flex-col items-center">
<div class="w-8 h-8 bg-blue-600 rounded-full flex items-center justify-center">
<?php if ($index === count($timeline) - 1) : ?>
<svg class="w-5 h-5 text-white" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"></path>
</svg>
<?php else : ?>
<div class="w-2 h-2 bg-white rounded-full"></div>
<?php endif; ?>
</div>
<?php if ($index !== count($timeline) - 1) : ?>
<div class="w-0.5 h-full bg-blue-200 mt-2"></div>
<?php endif; ?>
</div>
<div class="flex-1 pb-6">
<div class="text-sm text-blue-600 mb-1"><?php echo esc_html($item['date'] ?? ''); ?></div>
<div class="text-gray-900"><?php echo esc_html($item['event'] ?? ''); ?></div>
</div>
</div>
<?php endforeach; ?>
</div>
<?php else : ?>
<div class="prose prose-lg max-w-none">
<?php the_content(); ?>
</div>
<?php endif; ?>
</section>
<?php endif; ?>
<!-- Результат -->
<?php if ($result) : ?>
<section class="mb-12">
<h2 class="text-3xl text-gray-900 mb-6">Результат</h2>
<div class="prose prose-lg max-w-none">
<div class="bg-green-50 rounded-lg p-4 border-l-4 border-green-600">
<p class="text-green-700 font-semibold text-lg"><?php echo esc_html($result); ?></p>
</div>
</div>
</section>
<?php endif; ?>
<!-- Документы -->
<?php
$documents = get_post_meta(get_the_ID(), 'case_documents', true);
if (empty($documents)) {
$documents = get_post_meta(get_the_ID(), 'documents', true);
}
if (!empty($documents)) :
if (!is_array($documents)) {
$documents = explode("\n", $documents);
}
?>
<section class="mb-12 bg-blue-50 rounded-2xl p-8">
<div class="flex items-start gap-4 mb-6">
<svg class="w-6 h-6 text-blue-600 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"></path>
</svg>
<div>
<h3 class="text-xl text-gray-900 mb-2">Подготовленные документы</h3>
<p class="text-gray-600">Все эти документы мы подготовили бесплатно в рамках нашего сервиса</p>
</div>
</div>
<ul class="space-y-2">
<?php foreach ($documents as $doc) : ?>
<li class="flex items-center gap-3">
<svg class="w-5 h-5 text-green-600 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"></path>
</svg>
<span class="text-gray-700"><?php echo esc_html(trim($doc)); ?></span>
</li>
<?php endforeach; ?>
</ul>
</section>
<?php endif; ?>
<!-- CTA блок для кейсов (градиент) -->
<div class="bg-gradient-to-r from-blue-600 to-blue-700 rounded-2xl p-10 mb-12 text-white text-center">
<svg class="w-12 h-12 mx-auto mb-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 6l3 1m0 0l-3 9a5.002 5.002 0 006.001 0M6 7l3 9M6 7l6-2m6 2l3-1m-3 1l-3 9a5.002 5.002 0 006.001 0M18 7l3 9m-3-9l-6-2m0-2v2m0 16V5m0 16H9m3 0h3"></path>
</svg>
<h3 class="text-3xl mb-4">Попали в похожую ситуацию?</h3>
<p class="text-xl mb-6 text-blue-100">Мы поможем защитить ваши права бесплатно. Расскажите о своей проблеме, и мы подготовим все необходимые документы.</p>
<a href="<?php echo esc_url(clientprav_get_form_url()); ?>"
class="inline-block bg-white text-blue-600 px-10 py-4 rounded-lg hover:bg-blue-50 transition-colors font-semibold">
Получить помощь
</a>
</div>
<?php endif; ?>
<?php if (has_category('faq')) : ?>
<?php
$short_answer = clientprav_get_faq_short_answer(get_the_ID());
if ($short_answer) :
?>
<!-- Краткий ответ -->
<div class="mb-10 bg-blue-50 border-l-4 border-blue-600 rounded-r-xl p-6">
<h3 class="text-xl text-gray-900 mb-3">Краткий ответ</h3>
<p class="text-gray-700 leading-relaxed"><?php echo esc_html($short_answer); ?></p>
</div>
<?php endif; ?>
<!-- CTA блок для FAQ -->
<div class="bg-blue-50 rounded-2xl p-8 mb-12">
<h3 class="text-2xl text-gray-900 mb-3">Нужна помощь с защитой прав потребителей?</h3>
<p class="text-gray-600 mb-6">Наш сервис бесплатно поможет составить претензию, жалобу или исковое заявление</p>
<a href="<?php echo esc_url(clientprav_get_form_url()); ?>"
class="inline-block bg-blue-600 text-white px-8 py-3 rounded-lg hover:bg-blue-700 transition-colors">
Получить консультацию
</a>
</div>
<?php endif; ?>
<?php if (has_category('news')) : ?>
<!-- CTA блок для новостей -->
<div class="bg-blue-50 rounded-2xl p-8 mb-12">
<h3 class="text-2xl text-gray-900 mb-3">Нужна помощь с защитой прав потребителей?</h3>
<p class="text-gray-600 mb-6">Наш сервис бесплатно поможет составить претензию, жалобу или исковое заявление</p>
<a href="<?php echo esc_url(clientprav_get_form_url()); ?>"
class="inline-block bg-blue-600 text-white px-8 py-3 rounded-lg hover:bg-blue-700 transition-colors">
Получить консультацию
</a>
</div>
<?php endif; ?>
<!-- Похожие материалы -->
<?php
$current_categories = wp_get_post_categories(get_the_ID());
$related_query = new WP_Query(array(
'post_type' => 'post',
'posts_per_page' => 3,
'post__not_in' => array(get_the_ID()),
'category__in' => $current_categories,
'orderby' => 'date',
'order' => 'DESC',
));
if ($related_query->have_posts()) :
?>
<div class="mt-12">
<h3 class="text-2xl text-gray-900 mb-6">
<?php echo has_category('cases') ? 'Другие кейсы' : (has_category('faq') ? 'Похожие вопросы' : 'Читайте также'); ?>
</h3>
<div class="space-y-4">
<?php while ($related_query->have_posts()) : $related_query->the_post(); ?>
<a href="<?php the_permalink(); ?>"
class="block bg-gray-50 rounded-xl p-5 hover:bg-gray-100 transition-colors group">
<div class="flex items-center justify-between">
<div>
<div class="text-sm text-gray-500 mb-2"><?php echo get_the_date(); ?></div>
<div class="text-lg text-gray-900 group-hover:text-blue-600 transition-colors">
<?php the_title(); ?>
</div>
</div>
<svg class="w-5 h-5 text-gray-400 group-hover:text-blue-600 transition-colors rotate-180" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 19l-7-7 7-7"></path>
</svg>
</div>
</a>
<?php endwhile; ?>
</div>
</div>
<?php wp_reset_postdata(); ?>
<?php endif; ?>
</article>
</div>
</div>
<?php
get_footer();