images-portfolio

This commit is contained in:
2026-07-04 19:07:42 +03:00
parent 1daadd6d1e
commit a20d51db18
5 changed files with 298 additions and 7 deletions

View File

@@ -0,0 +1,125 @@
<?php
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
$page = sev_tort_current_page_config();
if ( ! function_exists( 'sev_tort_portfolio_image_groups' ) ) {
function sev_tort_portfolio_image_groups() {
$base_dir = get_template_directory() . '/assets/images/images';
$base_uri = get_template_directory_uri() . '/assets/images/images';
$groups = array(
array(
'title' => 'Бенто и праздничные торты',
'lead' => 'Компактные торты, надписи, минималистичный и яркий декор для личных поводов.',
'path' => '',
'alt' => 'Бенто торт на заказ в Севастополе',
),
array(
'title' => 'Медовые торты и классические работы',
'lead' => 'Подборка тортов с натуральным декором, ягодами, кремом и аккуратной подачей.',
'path' => 'medobory_torty_na_zakaz',
'alt' => 'Медовый торт на заказ в Севастополе',
),
array(
'title' => 'Авторские торты Stefany Cake',
'lead' => 'Примеры детских, свадебных, тематических и праздничных тортов с индивидуальным декором.',
'path' => 'stefanycake_torty_na_zakaz',
'alt' => 'Авторский торт на заказ в Севастополе',
),
);
foreach ( $groups as $index => $group ) {
$directory = trailingslashit( $base_dir );
$uri = trailingslashit( $base_uri );
if ( $group['path'] ) {
$directory .= $group['path'] . '/';
$uri .= $group['path'] . '/';
}
$files = array();
foreach ( array( 'jpg', 'jpeg', 'png', 'webp' ) as $extension ) {
$matched_files = glob( $directory . '*.' . $extension );
if ( $matched_files ) {
$files = array_merge( $files, $matched_files );
}
}
natsort( $files );
$groups[ $index ]['images'] = array_map(
function ( $file ) use ( $directory, $uri, $group ) {
$name = basename( $file );
$number = preg_replace( '/\D+/', '', pathinfo( $name, PATHINFO_FILENAME ) );
$size = @getimagesize( $file );
return array(
'src' => $uri . $name,
'alt' => trim( $group['alt'] . ( $number ? ' - работа ' . $number : '' ) ),
'width' => $size ? $size[0] : 600,
'height' => $size ? $size[1] : 600,
);
},
$files
);
}
return $groups;
}
}
$portfolio_groups = sev_tort_portfolio_image_groups();
get_header();
?>
<main class="portfolio-page">
<section class="portfolio-hero">
<div class="portfolio-hero__inner">
<div class="portfolio-hero__content">
<span class="portfolio-hero__eyebrow">Портфолио</span>
<h1 class="portfolio-hero__title"><?php echo esc_html( $page['h1'] ); ?></h1>
<p class="portfolio-hero__lead"><?php echo esc_html( $page['lead'] ); ?></p>
</div>
<div class="portfolio-hero__meta">
<span class="portfolio-hero__meta-number"><?php echo esc_html( array_sum( array_map( static function ( $group ) { return count( $group['images'] ); }, $portfolio_groups ) ) ); ?></span>
<span class="portfolio-hero__meta-text">примеров тортов в галерее</span>
</div>
</div>
</section>
<section class="portfolio-gallery">
<div class="portfolio-gallery__inner">
<?php foreach ( $portfolio_groups as $group ) : ?>
<div class="portfolio-gallery__section">
<div class="portfolio-gallery__head">
<h2 class="portfolio-gallery__title"><?php echo esc_html( $group['title'] ); ?></h2>
<p class="portfolio-gallery__lead"><?php echo esc_html( $group['lead'] ); ?></p>
</div>
<div class="portfolio-gallery__grid">
<?php foreach ( $group['images'] as $image ) : ?>
<figure class="portfolio-gallery__item">
<img class="portfolio-gallery__image" src="<?php echo esc_url( $image['src'] ); ?>" alt="<?php echo esc_attr( $image['alt'] ); ?>" width="<?php echo esc_attr( $image['width'] ); ?>" height="<?php echo esc_attr( $image['height'] ); ?>" loading="lazy">
</figure>
<?php endforeach; ?>
</div>
</div>
<?php endforeach; ?>
</div>
</section>
<section class="portfolio-lead">
<div class="portfolio-lead__inner">
<div class="portfolio-lead__content">
<span class="section-eyebrow">Заявка</span>
<h2 class="section-title">Понравился стиль из портфолио?</h2>
<p class="portfolio-lead__text">Отправьте пример, дату и пожелания по весу. Подскажем начинку, стоимость и ближайший свободный срок.</p>
</div>
<?php get_template_part( 'template-parts/lead-form', null, array( 'context' => 'portfolio' ) ); ?>
</div>
</section>
</main>
<?php
get_footer();