1 javascript php wordpress advanced-custom-fields wordpress-gutenberg
我已经设置了 ACF Gutenberg Block 以在后端编辑器中渲染光滑的滑块,并且我放置了一个 console.log 以确保查看它是否加载,并且确实加载了。但是,它不会像前端那样渲染滑块。
我尝试过同时使用这两种enqueue_block_assets方法,enqueue_block_editor_assets但这些都不起作用。
我的 JavaScript 排队:
wp_enqueue_script(
'slick',
plugins_url('slick.js', __FILE__),
['wp-blocks', 'wp-element', 'wp-components', 'wp-i18n'],
filemtime(plugin_dir_path(__FILE__) . 'slick.js')
);
wp_enqueue_script(
'slick-init',
plugins_url('init-slick.js', __FILE__),
['wp-blocks', 'wp-element', 'wp-components', 'wp-i18n'],
filemtime(plugin_dir_path(__FILE__) . 'init-slick.js')
);
Run Code Online (Sandbox Code Playgroud)
我的 CSS 排队:
wp_enqueue_style(
'slick-css',
plugins_url( '/resources/slick.css', __FILE__),
[ 'wp-blocks', 'wp-element', 'wp-components', 'wp-i18n' ],
filemtime( plugin_dir_path( __FILE__ ) . '/resources/slick.css')
);
wp_enqueue_style(
'slick-theme-css',
plugins_url( '/resources/slick-theme.css' __FILE__),
[ 'wp-blocks', 'wp-element', 'wp-components', 'wp-i18n' ],
filemtime( plugin_dir_path( __FILE__ ) . '/resources/slick-theme.css')
);
Run Code Online (Sandbox Code Playgroud)
我的 Init-slick.js 文件:
(function() {
$(".slider").slick({
dots: true,
infinite: true,
speed: 300,
slidesToShow: 1,
adaptiveHeight: true,
rows: 0
});
});
console.log("I'm loaded!");
Run Code Online (Sandbox Code Playgroud)
在所有:
function slider_block()
{
wp_enqueue_script(
'slick',
plugins_url('slick.js', __FILE__),
['wp-blocks', 'wp-element', 'wp-components', 'wp-i18n'],
filemtime(plugin_dir_path(__FILE__) . 'slick.js')
);
wp_enqueue_script(
'slick-init',
plugins_url('init-slick.js', __FILE__),
['wp-blocks', 'wp-element', 'wp-components', 'wp-i18n'],
filemtime(plugin_dir_path(__FILE__) . 'init-slick.js')
);
wp_enqueue_style(
'slick-css',
get_stylesheet_directory_uri() . '/resources/slick.css',
[ 'wp-blocks', 'wp-element', 'wp-components', 'wp-i18n' ],
filemtime(plugin_dir_path(__FILE__) . '/resources/slick.css')
);
wp_enqueue_style(
'slick-theme-css',
get_stylesheet_directory_uri() . '/resources/slick-theme.css',
[ 'wp-blocks', 'wp-element', 'wp-components', 'wp-i18n' ],
filemtime(plugin_dir_path(__FILE__) . '/resources/slick-theme.css')
);
}
add_action('enqueue_block_assets', 'slider_block');
Run Code Online (Sandbox Code Playgroud)
最终结果应该是一个滑块,但是,即使选择单词来激活光滑滑块,图像仍然显示堆叠在 acf gutenberg 块的后端。它永远不会在后端初始化添加 div 类,slick-initialized slick-slider它仍然保留相同的 div 类<div class="slider">
小智 9
我在使用 Flickity 滑块时遇到了同样的问题很长时间,但我花在研究这个问题上的时间并没有浪费,我找到了答案并让它发挥了作用!
我相信您所有的排队都是正确的,因为 console.log 显示了通知,所以一切都很好。
根据acf_register_block 函数上 ACF 文档页面的最底部,您必须挂钩“render_block_preview”操作并应用 JS 代码“就好像该块是新绘制的一样” - 这样做是因为该块在加载时会渲染多次帖子编辑页面和实际编辑块。
所以你的 Init-slick.js 代码应该如下所示:
(function($){
var initializeBlock = function( $block ) {
$(".slider").slick({
dots: true,
infinite: true,
speed: 300,
slidesToShow: 1,
adaptiveHeight: true,
rows: 0
});
}
// Initialize each block on page load (front end).
$(document).ready(function(){
initializeBlock();
});
// Initialize dynamic block preview (editor).
if( window.acf ) {
window.acf.addAction( 'render_block_preview', initializeBlock );
}
})(jQuery);
Run Code Online (Sandbox Code Playgroud)
我没有测试这段代码,但类似的 Flickity 实现在网站的后端和前端都对我有用。
希望这会有所帮助,如果它也适合您,请告诉我!