Php 创建光滑的滑块,带有打开模式的按钮
更新(见下) 我正在创建一个带有光滑滑块的推荐滑块,但我需要在每个幻灯片中都有一个模型 我有一个自定义的帖子类型“推荐信”(英文的“getuigenissen”)有多个ACF:标题、名称、功能、图像和视频。我想在每张幻灯片上显示一个按钮,打开一个模式,视频附在特定的推荐信上。我能想到的唯一方法是为每个推荐信创建一个模态div,但我认为这会创建很多不必要的代码 PHP代码(我用一个短代码显示推荐信)Php 创建光滑的滑块,带有打开模式的按钮,php,jquery,css,wordpress,slick.js,Php,Jquery,Css,Wordpress,Slick.js,更新(见下) 我正在创建一个带有光滑滑块的推荐滑块,但我需要在每个幻灯片中都有一个模型 我有一个自定义的帖子类型“推荐信”(英文的“getuigenissen”)有多个ACF:标题、名称、功能、图像和视频。我想在每张幻灯片上显示一个按钮,打开一个模式,视频附在特定的推荐信上。我能想到的唯一方法是为每个推荐信创建一个模态div,但我认为这会创建很多不必要的代码 PHP代码(我用一个短代码显示推荐信) 您可以使用JS创建一个模式并动态更改视频 POC: const视频={ 标题1:“https:/
您可以使用JS创建一个模式并动态更改视频 POC:
const视频={
标题1:“https://www.youtube.com/embed/dQw4w9WgXcQ",
标题2:“https://www.youtube.com/embed/eRBOgtp0Hac"
}
const modal=document.querySelector(“.video modal”);
document.addEventListener(“单击”,(e)=>{
if(例如target.classList.contains(“打开模式”)){
modal.innerHTML=`;
modal.classList.add(“show”);
}
});代码>
。打开模式{
边框:实心;
填充:10px;
利润率:10px;
光标:指针;
}
.视频模式{
显示:无;
位置:绝对位置;
顶部:100px;
左:10px;
右:10px;
z指数:100;
}
.video-modal.show{
显示:块;
}
video 1
视频2
您可以使用JS创建一个模式并动态更改视频
POC:
const视频={
标题1:“https://www.youtube.com/embed/dQw4w9WgXcQ",
标题2:“https://www.youtube.com/embed/eRBOgtp0Hac"
}
const modal=document.querySelector(“.video modal”);
document.addEventListener(“单击”,(e)=>{
if(例如target.classList.contains(“打开模式”)){
modal.innerHTML=`;
modal.classList.add(“show”);
}
});代码>
。打开模式{
边框:实心;
填充:10px;
利润率:10px;
光标:指针;
}
.视频模式{
显示:无;
位置:绝对位置;
顶部:100px;
左:10px;
右:10px;
z指数:100;
}
.video-modal.show{
显示:块;
}
video 1
视频2
这是使用您的代码片段测试的代码。在这个解决方案中,比如在Matan Sanbira'Answer中,我使用data src属性来更改模态块内容。
所以我们不会在循环中生成硬编码模式。您可能正在使用支持Oembed的服务,如Youtube、Vimeo。。。但这种方法甚至可以用于自托管视频。
您只需要更改模态容器中的iFrame代码,以适应视频服务需求
php代码:
function dfib_getuigenissen_shortcode( $atts ) {
//PLZ Verify your Assets path for the script
wp_enqueue_script( 'getuigenissenjs', get_stylesheet_directory_uri().'/inc/assets/js/getuigenissen.js' );
ob_start();
$query = new WP_Query( array(
'post_type' => 'getuigenissen',
'posts_per_page' => -1,
'order' => 'ASC',
'orderby' => 'rand',
) );
if ( $query->have_posts() ) { ?>
<div class="block__getuigenissen">
<div class="getuigenissen__wrapper">
<?php while ( $query->have_posts() ) : $query->the_post(); ?>
<?php
//Just in case you are using an Ombed field not a URL field or simple text
//In this example We don't need Iframe formatting
//So we get only the ACF field URL
//That's why I added false here
$videosrc=get_field('getuigenis_video',false, false);
$foto= get_field('getuigenis_foto');
?>
<div class="getuigenis__item" style="background-image: url('<?php echo esc_url($foto['url']); ?>');">
<h2><?php _e( 'Getuigenissen', 'copro' ) ?></h2>
<div class="getuigenis__inner">
<p class="getuigenis__quote"><?php the_field('getuigenis_getuigenis'); ?></p>
<p class="getuigenis__info"><?php the_field('getuigenis_naam');?>, <?php the_field('getuigenis_functie'); ?></p>
<a class="getuigenis__video" href="#" data-toggle="modal" data-src="<?php echo $videosrc ?>" data-target="#myModal"><?php _e( 'Bekijk de volledige video-getuigenis', 'copro' ) ?></a>
</div>
<!--I removed your modal code here-->
</div>
<?php endwhile;
wp_reset_postdata(); ?>
</div>
<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-body">
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
<div class="embed-responsive embed-responsive-16by9">
<iframe class="embed-responsive-item" src="" id="video" allowscriptaccess="always" allow="autoplay"></iframe>
</div>
</div>
</div>
</div>
</div>
</div>
<?php $myvariable = ob_get_clean();
return $myvariable;
}
}
add_shortcode( 'getuigenissen', 'dfib_getuigenissen_shortcode' );
如果已经在使用document ready调用,那么您可以在main.js或加载slick.js的某个地方通过function\uu videoModal()
之类的函数在这里更改它,在document ready附近,您只需通过调用它即可
您可以使用您的代码片段检查此中的js代码。在这个解决方案中,比如在Matan Sanbira'Answer中,我使用data src属性来更改模态块内容。
所以我们不会在循环中生成硬编码模式。您可能正在使用支持Oembed的服务,如Youtube、Vimeo。。。但这种方法甚至可以用于自托管视频。
您只需要更改模态容器中的iFrame代码,以适应视频服务需求
php代码:
function dfib_getuigenissen_shortcode( $atts ) {
//PLZ Verify your Assets path for the script
wp_enqueue_script( 'getuigenissenjs', get_stylesheet_directory_uri().'/inc/assets/js/getuigenissen.js' );
ob_start();
$query = new WP_Query( array(
'post_type' => 'getuigenissen',
'posts_per_page' => -1,
'order' => 'ASC',
'orderby' => 'rand',
) );
if ( $query->have_posts() ) { ?>
<div class="block__getuigenissen">
<div class="getuigenissen__wrapper">
<?php while ( $query->have_posts() ) : $query->the_post(); ?>
<?php
//Just in case you are using an Ombed field not a URL field or simple text
//In this example We don't need Iframe formatting
//So we get only the ACF field URL
//That's why I added false here
$videosrc=get_field('getuigenis_video',false, false);
$foto= get_field('getuigenis_foto');
?>
<div class="getuigenis__item" style="background-image: url('<?php echo esc_url($foto['url']); ?>');">
<h2><?php _e( 'Getuigenissen', 'copro' ) ?></h2>
<div class="getuigenis__inner">
<p class="getuigenis__quote"><?php the_field('getuigenis_getuigenis'); ?></p>
<p class="getuigenis__info"><?php the_field('getuigenis_naam');?>, <?php the_field('getuigenis_functie'); ?></p>
<a class="getuigenis__video" href="#" data-toggle="modal" data-src="<?php echo $videosrc ?>" data-target="#myModal"><?php _e( 'Bekijk de volledige video-getuigenis', 'copro' ) ?></a>
</div>
<!--I removed your modal code here-->
</div>
<?php endwhile;
wp_reset_postdata(); ?>
</div>
<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-body">
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
<div class="embed-responsive embed-responsive-16by9">
<iframe class="embed-responsive-item" src="" id="video" allowscriptaccess="always" allow="autoplay"></iframe>
</div>
</div>
</div>
</div>
</div>
</div>
<?php $myvariable = ob_get_clean();
return $myvariable;
}
}
add_shortcode( 'getuigenissen', 'dfib_getuigenissen_shortcode' );
如果已经在使用document ready调用,那么您可以在main.js或加载slick.js的某个地方通过function\uu videoModal()
之类的函数在这里更改它,在document ready附近,您只需通过调用它即可
您可以在此检查js代码您可以创建一个模式,并使用js动态更改视频。您可以给出一些示例代码来说明如何执行此操作吗?多个是指使用包含多个视频的ACF repeater字段?您可以使用JSF创建一个模式并动态更改视频。您可以给出一些示例代码来说明如何做到这一点吗?多个是指使用包含多个视频的ACF repeater字段?这看起来像我需要的,但我如何确保他选择了链接到帖子的视频?使用这段代码,你只需要在循环中设置一个新的数据属性,该属性带有类“getuigenis__video”,看起来像(data video=“acf video”src),并向其添加另一个类“open model”,这看起来像我需要的,但是我怎样才能确保他选择了链接到帖子的视频呢?使用这段代码,你只需要在循环中设置一个新的数据属性,该属性类似于(data video=“acf video”src)的类“getuigenis\uu video”,并在其中添加另一个类“open modal”,我对它进行了一些小的调整,但我需要确保我使用了youtube上的嵌入url,而不是“监视”url。有办法解决这个问题吗?我注意到当我关闭模式时视频一直在播放,我可以在模式关闭时停止视频吗?我还看到模式背景显示在我的模式顶部,是否应该使用一些css/SCS?我添加了一个功能,验证youtube Url和我停止播放视频的缺失行…:)关于这个模式,你可以给它你正在使用的旧设计相同的类。。。如果Css希望它是一个子元素getuigenis\uuuu,那就很棘手了!你能给我看一下你的手机的屏幕截图吗?有css风格的代码吗?我们会在Vimeo上上传视频,那么我需要一种不同的方法吗?我用我的进度更新了我的问题,并链接到了demoI。我做了一些小调整,但我需要确保我使用了youtube上的嵌入url,并且不使用“观看”url。有办法解决这个问题吗?我注意到当我关闭模式时视频一直在播放,我可以在模式关闭时停止视频吗?我还看到模式背景显示在我的模式顶部,是否应该使用一些css/SCS?我添加了一个功能,验证youtube Url和我停止播放视频的缺失行…:)大约
jQuery(document).ready(function($) {
$(window).on('resize', function() {
prefooterHeight = $('.block__prefooter').outerHeight();
prefooterTop = prefooterHeight / 2;
$('.block__prefooter').css('top', prefooterTop);
}).trigger('resize');
$('.getuigenissen__wrapper').slick({
slidesToShow: 1,
slidesToScroll: 1,
fade: true,
infinite: true,
autoplay: true,
autoplaySpeed: 7000,
adaptiveHeight: true,
prevArrow: $('.arrow-prev'),
nextArrow: $('.arrow-next'),
});
var videosrc;
$('.getuigenis__video').click(function() {
videosrc = $(this).data( "src" );
console.log(videosrc);
url = "https://player.vimeo.com/video/" + videosrc + "?title=0&byline=0&portrait=0";
console.log(url);
});
if ( $('#myModal').hasClass('in') ) {
$("#video").attr('src',url );
$('html').css('overflow', 'hidden');
} else {
$("#video").attr('src',videosrc);
$('html').css('overflow', 'visible');
}
});
function dfib_getuigenissen_shortcode( $atts ) {
//PLZ Verify your Assets path for the script
wp_enqueue_script( 'getuigenissenjs', get_stylesheet_directory_uri().'/inc/assets/js/getuigenissen.js' );
ob_start();
$query = new WP_Query( array(
'post_type' => 'getuigenissen',
'posts_per_page' => -1,
'order' => 'ASC',
'orderby' => 'rand',
) );
if ( $query->have_posts() ) { ?>
<div class="block__getuigenissen">
<div class="getuigenissen__wrapper">
<?php while ( $query->have_posts() ) : $query->the_post(); ?>
<?php
//Just in case you are using an Ombed field not a URL field or simple text
//In this example We don't need Iframe formatting
//So we get only the ACF field URL
//That's why I added false here
$videosrc=get_field('getuigenis_video',false, false);
$foto= get_field('getuigenis_foto');
?>
<div class="getuigenis__item" style="background-image: url('<?php echo esc_url($foto['url']); ?>');">
<h2><?php _e( 'Getuigenissen', 'copro' ) ?></h2>
<div class="getuigenis__inner">
<p class="getuigenis__quote"><?php the_field('getuigenis_getuigenis'); ?></p>
<p class="getuigenis__info"><?php the_field('getuigenis_naam');?>, <?php the_field('getuigenis_functie'); ?></p>
<a class="getuigenis__video" href="#" data-toggle="modal" data-src="<?php echo $videosrc ?>" data-target="#myModal"><?php _e( 'Bekijk de volledige video-getuigenis', 'copro' ) ?></a>
</div>
<!--I removed your modal code here-->
</div>
<?php endwhile;
wp_reset_postdata(); ?>
</div>
<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-body">
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
<div class="embed-responsive embed-responsive-16by9">
<iframe class="embed-responsive-item" src="" id="video" allowscriptaccess="always" allow="autoplay"></iframe>
</div>
</div>
</div>
</div>
</div>
</div>
<?php $myvariable = ob_get_clean();
return $myvariable;
}
}
add_shortcode( 'getuigenissen', 'dfib_getuigenissen_shortcode' );
function checkYoutube(url) {
var p = /^(?:https?:\/\/)?(?:www\.)?(?:youtu\.be\/|youtube\.com\/(?:embed\/|v\/|watch\?v=|watch\?.+&v=))((\w|-){11})(?:\S+)?$/;
var matches = url.match(p);
if(matches){
return 'https://youtube.com/embed/'+matches[1];
}
return false;
}
$(document).ready(function() {
var videosrc;
$('.getuigenis__video').click(function() {
validsrc=checkYoutube(videosrc);
console.log(validsrc);
});
$('#myModal').on('shown.bs.modal', function (e) {
$("#video").attr('src',validsrc+ "?autoplay=1&modestbranding=1&showinfo=0" );
})
$('#myModal').on('hide.bs.modal', function (e) {
//I forgot to add this line to stop the player
//Otherwise it's done player.stop() using Youtube Js API
$("#video").attr("src","");
$("#video").attr('src',validsrc);
})
});
$(document).ready(function() {
__videoModal();
//other stuff
});