WP 5.6编辑器和ACF Pro的光滑滑块宽度问题



这是一个特定的问题,但我希望我不是唯一一个这样做的人!

更新到WP 5.6后,我的所有网站都在块编辑器中呈现Slick Slider时出现问题。在前端,滑块很好。

我认为问题是,如果我有一个内部有Slick Slider的块,并且该块在WP编辑器中设置为"全宽",则Slick Slide无法在块编辑器中找到窗口的正确大小。然后,滑块扩展到视口之外,将块编辑器设置框推离屏幕,使编辑器非常不可用。

正如标题所示,我使用的是最新版本的光滑滑块,并通过WP 5.6中的自定义ACF块来渲染它。

在5.6之前,一切都很好。我希望解决方案是一个简单的CSS更改,但我一辈子都找不到有效的东西。

这是我的代码:

ACF块

acf_register_block_type(array(
'name'              => 'image-slider',
'title'             => __('Image Slider'),
'description'       => __('A slider of images.'),
'render_template'   => get_template_directory().'/inc/blocks/core/image-slider.php',
'render_callback'   => 'render_block__image_slider',
'category'          => 's2f-blocks',
'icon'              => 'images-alt2',
'keywords'          => array( 'slider', 'images', 's2f' ),
//'mode'                => false
));
if( !function_exists('render_block__image_slider') ) {
function render_block__image_slider( $block, $content = '', $is_preview = false, $post_id = 0 ) {
include(get_template_directory().'/inc/blocks/core/image-slider.php');
}
}

ACF块渲染模板

/**
* @param   array $block The block settings and attributes.
* @param   string $content The block inner HTML (empty).
* @param   bool $is_preview True during AJAX preview.
* @param   (int|string) $post_id The post ID this block is saved to.
*/
$block_name = 'image-slider-block';
// Create id attribute allowing for custom "anchor" value.
$id = 'slider-' . $block['id'];
if( !empty($block['anchor']) ) {
$id = $block['anchor'];
}
// Create class attribute allowing for custom "className" and "align" values.
$className = $block_name;
if( !empty($block['className']) ) {
$className .= ' ' . $block['className'];
}
if( !empty($block['align']) ) {
$className .= ' align' . $block['align'];
}
if( $is_preview ) {
$className .= ' is-admin';
}
$slidesToShow = get_field('slides_to_show') ?: '3';
$lightbox = get_field('lightbox_images') ?: false;
if( $lightbox ) {
$className .= ' is-lightbox';
}
$crop = get_field('crop_images') ?: false;
if( $crop ) {
$className .= ' is-cropped';
}
$arrows = get_field('show_arrows') ?: false;
if( $arrows ) {
$className .= ' has-arrows';
}
$slides = get_field('slides');

?>
<div id="<?php echo esc_attr($id); ?>" class="slider <?php echo esc_attr($className); ?> wp-block">
<?php if( $slides ): ?>
<div class="slides" data-slides="<?php echo $slidesToShow; ?>">
<?php foreach($slides as $slide) : ?>
<div class="slide text-center">
<?php if( $lightbox ) : ?>
<a href="<?php echo wp_get_attachment_image_url($slide['image']['id'], 'large', false); ?>" data-fancybox="<?php echo esc_attr($id); ?>">
<?php endif; ?>

<?php echo wp_get_attachment_image( $slide['image']['id'], 'large' ); ?>

<?php if( $lightbox ) : ?>
</a>
<?php endif; ?>
</div>
<?php endforeach; ?>
</div>
<?php else: ?>
<p>Please add some slides.</p>
<?php endif; ?>
</div>

滑动滑块JS

/**
* initializeBlock
*
* Adds custom JavaScript to the block HTML.
*
* @date    15/4/19
* @since   1.0.0
*
* @param   object $block The block jQuery element.
* @param   object attributes The block attributes (only available when editing).
* @return  void
*/
var initialiseSliderImageBlock = function( $block ) {

var slider = $block.find('.slides');
var slidesToShow = slider.data('slides');
var arrows = false;
if( !slidesToShow ) {
slidesToShow = 3;
}
if( isAdmin() ) {
var container = $block.find('.image-slider-block');
if( container.hasClass('has-arrows') ) {
arrows = true;
}
} else {
if( $block.hasClass('has-arrows')) {
arrows = true;
}
}


// init slider
slider.find('.slide').each(function() {
$(this).addClass('show-slide');
});

if( !slider.hasClass('slick-slider') ) {
slider.slick({
dots: true,
arrows: arrows,
infinite: false,
speed: 300,
slidesToShow: slidesToShow,
autoplay: false,
responsive: [
{
breakpoint: 1300,
settings: {
dots: true,
arrows: false
}
},
{
breakpoint: 1100,
settings: {
slidesToShow: Math.ceil(slidesToShow/2),
dots: true,
arrows: false
}
},
{
breakpoint: 700,
settings: {
slidesToShow: 2,
dots: true,
arrows: false
}
},
{
breakpoint: 450,
settings: {
slidesToShow: 1,
dots: true,
arrows: false
}
},
]
});

slider.on('init beforeChange', function(){
$.fn.matchHeight._update();
});

}

if( !isAdmin() ) {
initialiseHeightMatch($block);
}
}
// Initialize each block on page load (front end).
$(document).ready(function(){
$('.slider').each(function(){
initialiseSliderImageBlock( $(this) );
});
});
// Initialize dynamic block preview (editor).
if( window.acf ) {
window.acf.addAction( 'render_block_preview/type=image-slider', initialiseSliderImageBlock );
}

滑块css

.slider { 
position: relative; 
z-index:1; 
outline: none; 
overflow: hidden; 
.slide  { 
height: 100%; 
float: left !important; 
}
}
.slider .slide:nth-child(n+2)   { display: none; }
.slider .slide.show-slide       { display: block; }
.slick-list,
.slick-track                    { height: 100%; }
.slick-slider .slick-slide      { float: left; position: relative; width: 100%; outline: none; }
.slick-list                     { overflow: hidden; outline: none !important; position: relative; }
.slick-track                    { margin: 0 auto; outline: none; }
.slick-next,
.slick-prev { 
-webkit-appearance: none;
outline: none;
border: none;
position: absolute;
top: 0;
bottom: 0;
cursor: pointer;
font-size: 1px;
color: rgba(0,0,0,0);
width: 84px;
transition: 0.3s all ease;
z-index: 10;

background-color: rgba(0,0,0,0.1);
//background-image: url(../images-dist/icon-white-arrow-left.png);
background-repeat: no-repeat;
background-position: center;
background-size: contain;
}
.slick-next:hover,
.slick-prev:hover                       { width: 95px; }
.slick-next { 
right: 0; 
-moz-transform: scaleX(-1);
-o-transform: scaleX(-1);
-webkit-transform: scaleX(-1);
transform: scaleX(-1);
filter: FlipH;
-ms-filter: "FlipH"; 
}
.slick-prev                             { left: 0; }

ul.slick-dots {
padding: 0;
text-align: center;
list-style: none;
li {
display: inline-block;
list-style: none;

button {
border: none;
background-color: grey;
width: 20px;
height: 20px;
border-radius: 50%;
margin: 0 5px;
font-size: 0;
outline: none;
cursor: pointer;
}
&.slick-active button {
background-color: yellow;
}
}
}
.image-slider-block {
&.is-cropped {
.slick-track {
display: flex;
justify-content: stretch;
.slick-slide > div {
height: 100%;
}
}
img {
height: 100%;
flex: 1;
-o-object-fit: cover;
object-fit: cover;
width: 100%; 
} 
}
&.is-lightbox {
a {
display: block;
height: 100%;
}
}
}

我遇到了同样的问题

将此行添加到gutenberg编辑器css

.interface-interface-skeleton__editor {
overflow: auto;
}

最新更新