Посадка сайта на WordPress. Картинки фоном. Возможность редакции с админки пользователем?
Есть блоки карусели с текстовой информацией и картинками. Фон в этих блоках выводится из css методом background-image. Как при посадке на wordpress вывести при помощи php изображения так, чтобы пользователь мог их менять в админке?
<?php the_post_thumbnail(); ?> работает только когда картинка была в html коде.
<?php global $post; $myposts = get_posts([ 'numberposts' => -1, ]); if( $myposts ){ foreach( $myposts as $post ){ setup_postdata( $post ); ?> <div class="item card-1"> <div class="card-content"> <?php the_post_thumbnail() ?> /* что вместо этого? */ <span><?php the_title(); ?></span> <p><?php the_content(); ?></p> <a href="/testimonials">Подробнее</a> </div> </div> <?php } } wp_reset_postdata(); ?> |
<?php global $post; $myposts = get_posts([ 'numberposts' => -1, ]); if( $myposts ){ foreach( $myposts as $post ){ setup_postdata( $post ); ?> <div class="item card-1"> <div class="card-content"> <?php the_post_thumbnail() ?> /* что вместо этого? */ <span><?php the_title(); ?></span> <p><?php the_content(); ?></p> <a href="/testimonials">Подробнее</a> </div> </div> <?php } } wp_reset_postdata(); ?>
Дополнительно:
Ответы:
style="background-image: url(<?= get_the_post_thumbnail_url() ?>);"
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Если изображение должно быть фоном блока и при этом редактироваться из админки, получайте URL изображения через WordPress/ACF и подставляйте его в inline style или CSS-переменную.
the_post_thumbnail()выводит готовый тегimg, поэтому он не подходит напрямую дляbackground-image.Для миниатюры записи:
$image_url = get_the_post_thumbnail_url(get_the_ID(), 'large'); ?> <div class="item card-1" style="background-image: url('<?php echo esc_url($image_url); ?>');"> <div class="card-content"> <span><?php the_title(); ?></span> <p><?php echo esc_html(get_the_excerpt()); ?></p> </div> </div>
Если картинка хранится в ACF, лучше настроить поле так, чтобы оно возвращало ID изображения. Тогда можно получать нужный размер:
$image_id = get_field('slide_bg'); $image_url = $image_id ? wp_get_attachment_image_url($image_id, 'large') : '';
Ещё аккуратнее — использовать CSS-переменную:
<div class="item" style="--bg: url('<?php echo esc_url($image_url); ?>');">...</div>
.item { background-image: var(--bg); background-size: cover; background-position: center; }
Не забывайте про fallback: если пользователь не задал картинку, выводите стандартный фон или добавляйте класс
no-image. А если изображение несёт смысл, лучше использоватьimg, а не фон, потому что у фоновых картинок нет alt. Фон подходит для декоративных слайдов, но не для важных изображений товара или контента.Если таких блоков много, не вставляйте полноразмерные оригиналы. Берите размер
large,medium_largeили свой зарегистрированный размер черезadd_image_size(). Иначе пользователь сможет поменять картинку в админке, но страница начнёт грузить тяжёлые изображения по несколько мегабайт.Для адаптива фонов можно использовать
image-set()или разные CSS-переменные под media query, но не усложняйте без причины. Если это hero-картинка, добавьте заранее понятные размеры блока,background-size: coverи проверьте мобильную обрезку. Если изображение важно для SEO и доступности, лучше вывести его какpicture/imgс alt, а поверх уже положить текстовый слой.