在个人开发wordpress主题时,在首页插入幻灯片功能是许多人想要使用的.那怎嘛在不适用插件的情况下进行添加呢?以下小编分享下自己的经验
方法一:使用.swf播放器的插件添加
1.在index.html页面的合适位置添加代码
<div class="entry-content"><script src="<?php echo bloginfo('stylesheet_url')?>/flash.js"> </script></div>
让后在flash文件中修改相关的路径,如下图
同时,要在主题目录根文件正确的位置添加flash.js和focus3.swf文件如下图:
其中focus3.swf的效果如下图:
如此,便可以添加幻灯片了.此方法的缺陷:需要加载swf插件,随着H5的兴起有些落伍.其次,不能添加关联按钮控制轮播图片的切换.
(ps:小编还不会实现下载功能,如果有需要flash.js和focus3.swf的插件联系邮箱:shoudoagxw@163.com)
方法二:后台添加幻灯片类制作轮播特效
此方法相对而言简单些,在后台添加一个分类目录,在该分类目录下写3片文章(或你想要的轮播张数).让后在模板你想调用轮播效果的地方添加循环方法,便可以实现轮播效果.网上有篇教程使用的是if循环,我不知道哪里出错了,没有细看和调试,以下是我使用的方法:
<div class="avia-slideshow avia-slideshow-2 av-control-default av-default-height-applied avia-slideshow-featured_large av_slideshow_full avia-slide-slider "> <ul class="avia-slideshow-inner" style="padding-bottom: 42%;"> <?php $posts1 = get_posts("category=15&numberposts=2"); $query_index = 0; ?> <?php if ($posts1) : ?> <?php foreach ($posts1 as $post) : $query_index++; setup_postdata($post); ?> <li class=" slide-1 "> <a href="<?php echo site_url() ?>/category/products/london-bus/" data-rel="slideshow-2" class="avia-slide-wrap"> <img style="width: 100%; height: 630px;" src="<?php echo catch_that_image() ?> " title="<?php the_title() ?>" alt="<?php the_title() ?>" itemprop="thumbnailUrl"> </a> </li> <?php endforeach; ?> <?php endif; wp_reset_query(); ?> </ul> <div class="avia-slideshow-arrows avia-slideshow-controls"> <a href="#prev" class="prev-slide" aria-hidden="true" data-av_icon="" data-av_iconfont="entypo-fontello">Previous</a> <a href="#next" class="next-slide" aria-hidden="true" data-av_icon="" data-av_iconfont="entypo-fontello">Next</a> </div> <div class="avia-slideshow-dots avia-slideshow-controls"> <a href="#1" class="goto-slide active">1</a> <a href="#2" class="goto-slide ">2</a> <a href="#3" class="goto-slide ">3</a> </div> </div>
其中调用图片需要在functions中插入一段函数,大家在网上搜调用文章中的缩略图会有一堆答案,小编就不在此啰嗦了.而图片的轮播效果和图片的位置及样式需要用到js和css大家需要自行修改.
方法三:利用置顶文章作轮播特效
首先,需要进入后台添加文章页面,在文章名称下面点击快速编辑,在弹出的对话框中选择置顶文章。需要几个幻灯片就置顶几篇文章。
第二步,在主题的方法中添加以下函数,用于获取文章中的第一张图片。
// 获取内容的第一张图 function catch_that_image() { global $post, $posts; $first_img = ''; ob_start(); ob_end_clean(); $output = preg_match_all('/<img.+src=[\'"]([^\'"]+)[\'"].*>/i', $post->post_content, $matches); //四、获取文章中第一张图片的路径并输出 $first_img = $matches [1] [0]; //五、如果文章无图片,获取自定义图片 if(empty($first_img)){ //Defines a default image $first_img = "/images/default.jpg"; //请自行设置一张default.jpg图片 } return $first_img; } 第三步:在网站首页需要调用幻灯片的位置添加以下HTML代码:
<!--图片轮播区--> <div id="com_box" class="com_box ftl"> <?php $sticky = get_option('sticky_posts'); rsort( $sticky );//对数组逆向排序,即大ID在前 $sticky = array_slice( $sticky, 0, 5);//输出置顶文章数,请修改5,0不要动,如果需要全部置顶文章输出,可以把这句注释掉 query_posts( array( 'post__in' => $sticky, 'caller_get_posts' => 1 ) ); if (have_posts()) :while (have_posts()) : the_post(); ?> <div class="img dpn"><a href="<?php the_permalink(); ?>" target="_blank" title="<?php the_title(); ?>"><img class="img_directly_load" src="<?php echo get_first_image(); ?>" alt="<?php the_title(); ?>" /></a></div> <?php endwhile; endif; ?> <ul id="com_txt" class="title"> <?php $sticky = get_option('sticky_posts'); rsort( $sticky );//对数组逆向排序,即大ID在前 $sticky = array_slice( $sticky, 0, 5);//输出置顶文章数,请修改5,0不要动,如果需要全部置顶文章输出,可以把这句注释掉 query_posts( array( 'post__in' => $sticky, 'caller_get_posts' => 1 ) ); if (have_posts()) :while (have_posts()) : the_post(); ?> <li></li> <?php endwhile; endif; ?> </ul> </div> <script type="text/javascript"> function com_change() { var self_now = 0; var self_speed = 5000; var self_auto_change = null; var self_max = $('#com_box div.img').size(); function self_change(i) { $('#com_box div.img').hide(); $('#com_txt_bg li').removeClass('on'); $('#com_txt li').removeClass('on'); $('#com_box div.img:eq(' + i + ')').show(); $('#com_txt_bg li:eq(' + i + ')').addClass('on'); $('#com_txt li:eq(' + i + ')').addClass('on'); } function self_interval() { return setInterval(function(){ self_now++; if (self_now >= self_max) { self_now = 0; } self_change(self_now); }, self_speed); } $('#com_box div:first').show(); $('#com_txt_bg li:first').addClass('on'); $('#com_txt li:first').addClass('on'); $('#com_txt li').each(function(i) { $(this).mouseover(function(){ self_now = i; clearInterval(self_auto_change); self_change(i); }).mouseout(function(){ self_auto_change = self_interval(); }); }); $(function(){ $('#com_loding').hide(); self_auto_change = self_interval(); }); } com_change(); </script> 第四步:幻灯片需要使用JS文件,所以需要下载jQuery.js文件,并在网页中引入Js文件,<script type="text/javascript" src="<?php bloginfo('template_url'); ?>/images/jquery.js"></script> 接下来需要添加上css样式代码。如下仅供参考:
/*换灯片*/ .com_box {width:627px;height:279px;overflow:hidden;position:relative;} .com_box img{width:100%;height:100%;} .com_box ul.title li.on {background:#3598db;} .com_box ul.title {position:absolute;bottom:10px;right:5px;z-index:9;} .com_box ul.title li {counter-increment:listxh;display:inline-block;border-radius:12px;background: #000;} .com_box ul.title li:before{content:counter(listxh);display:inline-block;text-align:center;color:#fff;width:24px;height:24px;line-height:24px;font-weight:600;font-size:11px;font-family: "微软雅黑";} 此方法,小编测试过后,发现有很多的不完善之处,置顶文章没有会把所有的文章图片都调出来做轮播图,还有一些细节问题不完善,所以小编不建议使用。(参考:学做网站论坛)
方法四:利用js插件作轮播特效
第一步:在前端网页中放入以下代码:
/*css样式*/
<style>
@charset”utf-8″;
abbr,address,article,aside,audio,b,blockquote,body,canvas,caption,cite,code,dd,del,details,dfn,div,dl,dt,em,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,hgroup,html,i,iframe,img,ins,kbd,label,legend,li,mark,menu,nav,object,ol,p,pre,q,samp,section,small,span,strong,sub,summary,sup,table,tbody,td,tfoot,th,thead,time,tr,ul,var,video{margin:0;padding:0;border:0;outline:0;font-size:100%;background:0 0;font-weight:400;font-style:inherit;font-family:inherit;vertical-align:top}body{line-height:1;color:#000;background:#fff;font-size:12px;font-family:’simsun’}article,aside,details,figcaption,figure,footer,header,hgroup,hr,menu,nav,section{display:block}nav ul,ol,ul{list-style:none}:focus,a{outline:0}a{margin:0;font-size:100 %;vertical-align:baseline;background:0 0;blr:expression(this.onFocus=this.blur())}a,ins{text-decoration:none}a,hr{padding:0}ins,mark{background-color:#ff9;color:#000}mark{font-style:italic;font-weight:700}blockquote,q{quotes:none}blockquote:after,blockquote:before,q:after,q:before{content:”;content:none}del{text-decoration:line-through}abbr[title],dfn[title]{border-bottom:1px dotted;cursor:help}table{border-collapse:collapse;border-spacing:0}caption,td,th{text-align:left;font-weight:400}hr{height:1px;border:0;border-top:1px solid #cccccc;margin:1em 0}input,select{vertical-align:middle;border:0}
/*————————-归零样式END,请于样式表最前面调用————————-*/
/*—————–自定义按钮样式,移动端不需要,PC端根据实际情况选择—————-*/
.demo {width: 800px;height: 450px;font-size: 14px;position:relative;}
.demo a.control {position:absolute;display: block;top: 50%;margin-top: -78px;width: 76px;height: 112px;cursor: pointer;z-index: 2;background: url(../images/buttons.png) no-repeat}
.demo a.prev {left: 0;background-position: 0 0}
.demo a.next {right: 0;background-position: -76px 0}
.demo a.prev:hover {background-position: 0 -112px}
.demo a.next:hover {background-position: -76px -112px}
/*—————————-为保证最佳效果,建议设置如下样式————————*/
.slider {display: none}
<style>
</style>
<center>
<div class=”demo”>
<a class=”control”></a><a class=”control next “></a><!–自定义按钮,移动端可不写–>
<div class=”slider”><!–主体结构,请用此类名调用插件,此类名可自定义–>
<ul>
<li><a href=””><img src=”images/1.jpg” alt=”两弯似蹙非蹙笼烟眉,一双似喜非喜含情目。” /></a></li>
<li><a href=””><img src=”images/2.jpg” alt=”态生两靥之愁,娇袭一身之病。” /></a></li>
<li><a href=””><img src=”images/3.jpg” alt=”泪光点点,娇喘微微。” /></a></li>
<li><a href=””><img src=”images/4.jpg” alt=”闲静似娇花照水,行动如弱柳扶风。” /></a></li>
<li><a href=””><img src=”images/5.jpg” alt=”心较比干多一窍,病如西子胜三分。” /></a></li>
</ul>
</div>
</div>
<script>
$(“.slider”).YuxiSlider({
width:800, //容器宽度
height:450, //容器高度
control:$(‘.control’), //绑定控制按钮
during:4000, //间隔4秒自动滑动
speed:800, //移动速度0.8秒
mousewheel:true, //是否开启鼠标滚轮控制
direkey:true //是否开启左右箭头方向控制
});
</script>
</center>
第二步:引用jQuery文件
<script src=”js/jquery.min.js”></script>
<script src=”js/YuxiSlider.jQuery.min.js”></script>,YuxiSlider.jQuery.min.js的JS内容如下:
/* @extends jquery v1.10.2 * @fileOverview 自动兼容PC端、移动端的图片循环滚动插件 * @email 122452357@qq.com * @version v3.0 * @date 2016-01-05 * @remark Wang Yunhong -- The love of my life. * Copyright (c) 2015-2016 天涯浅唱, 请尊重劳动成果,若直接使用请注明出处,谢谢! * @example * $("slider").YuxiSlider(); * @parameter{ width:容器宽度, height:容器高度, control:控制按钮,PC端可传入控制按钮对象,移动端无按钮 auto:是否自动播放 默认自动(true), during:间隔时间, speed:图片滑动速度, mousewheel:是否开启鼠标滑轮 默认否(false), direkey:是否绑定方向键 默认否(false) } */ !function (a) { a.fn.extend({ YuxiSlider: function (b) { var c = { width: 640, height: 360, control: null, auto: !0, during: 3e3, speed: 800, mousewheel: !1, direkey: !1 }, d = a.extend(c, b); return a(this).each(function () { var b = a(this), c = a("ul", b), e = a("li", b), f = e.length, g = 0, h = null, i = '<div class="desc"><p class="title"><a href=""></a></p><span class="num"><em class="curr-num"></em><em class="line"></em><em class="total-num"></em></span></div><div class="bg"></div>'; b.append(i); var j = a("p.title a", b), k = a("em.curr-num", b), l = a("em.total-num", b), m = 0, n = {}, o = {}, p = { mobileDevice: navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i), init: function () { if (p.style(), p.mobileDevice) { var e = a(window).width(), g = d.width / d.height; d.width = e, d.height = e / g, b.css({fontSize: a(window).width() / 640 * 1.285 + "rem"}) } b.add("img", b).width(d.width).height(d.height), c.width(f * d.width), p.description(), p.bindControl(), f > 2 && c.prepend(a("li", c).last()).css({left: -d.width}), d.auto && p.auto() }, auto: function () { h = d.auto ? setInterval(function () { p.moving(!0) }, d.during) : null }, stop: function () { h && clearInterval(h) }, description: function () { k.text(g + 1), l.text(f), j.text(e.eq(g).find("img").attr("alt")).attr("href", e.eq(g).find("a").attr("href")).width(d.width - a("span.num", b).width() - 20) }, bindControl: function () { if (p.mobileDevice) { if (d.control && d.control.remove(), 2 >= f) return; c.get(0).addEventListener("touchstart", p.touchstart, !1), c.get(0).addEventListener("touchmove", p.touchmove, !1), c.get(0).addEventListener("touchend", p.touchend, !1) } else { b.hover(function () { d.auto && p.stop(), a(document).on("keydown", function (a) { a.preventDefault(), (39 === a.keyCode || 40 === a.keyCode) && p.moving(!0), (37 === a.keyCode || 38 === a.keyCode) && p.moving(!1) }) }, function () { a(document).unbind(), d.auto && p.auto() }); var e = void 0 !== document.mozHidden ? "DOMMouseScroll" : "mousewheel"; d.mousewheel && b.on(e, function (a) { a.preventDefault(), a.stopPropagation(); var c = a.originalEvent.wheelDelta ? a.originalEvent.wheelDelta : -a.originalEvent.detail, d = b.data("timeoutId"); d && clearInterval(d), b.data("timeoutId", setTimeout(function () { p.moving(0 > c ? !0 : !1), b.removeData("timeoutId") }, 100)) }), d.control && d.control.on("click", function () { p.moving(a(this).index() ? !0 : !1) }).hover(function () { d.auto && p.stop() }, function () { d.auto && p.auto() }) } }, moving: function (b) { if (1 != f) { var e = 0, h = !0; "boolean" == typeof b ? h = b : (h = b > 0 ? !1 : !0, e = b), g = h ? g >= f - 1 ? 0 : g + 1 : 0 >= g ? f - 1 : g - 1, p.description(), f > 2 ? (h ? c.append(a("li", c).first()).css({left: 0 + e}) : c.prepend(a("li", c).last()).css({left: -2 * d.width + e}), c.stop().animate({left: [-d.width, "easeOutExpo"]}, d.speed)) : h ? c.stop().animate({left: -d.width}, .6 * d.speed, function () { a(this).append(a("li", this).first()).css({left: 0}) }) : c.prepend(a("li", c).last()).css({left: -d.width + e}).stop().animate({left: 0}, .6 * d.speed) } }, touchPos: function (a) { for (var c, d, e, b = a.changedTouches, f = {}, g = 0; g < b.length; g++) c = b[g], d = c.clientX, e = c.clientY; return f.x = d, f.y = e, f }, touchstart: function (a) { p.stop(), m = (new Date).getTime(), n = p.touchPos(a), o.left = c.offset().left }, touchmove: function (a) { a.preventDefault(); var b = p.touchPos(a).x - n.x; c.stop().css({left: o.left + b}) }, touchend: function (a) { var b = p.touchPos(a).x - n.x, e = (new Date).getTime() - m; 0 !== Math.abs(b) && (350 >= e ? p.moving(b) : Math.abs(b) <= d.width / 2 ? c.stop().animate({left: [o.left, "easeOutExpo"]}, d.speed / 2) : p.moving(b), d.auto && p.auto()) }, style: function () { b.css({position: "relative", overflow: "hidden"}).fadeIn(450), e.css({ display: "inline", "float": "left" }), c.add(a(".bg", b)).add(a(".desc", b)).add(a(".num", b)).css({position: "absolute"}), a(".bg", b).css({ background: "#000", filter: "alpha(opacity=50)", opacity: .5 }).add(a(".desc", b)).css({ width: "100%", height: "3em", bottom: 0, left: 0 }), a(".desc").css({zIndex: 2}), a("p.title", b).css({ "float": "left", height: "1em", padding: "1em .5em", fontFamily: "microsoft yahei" }), a("p.title a", b).css({ display: "block", color: "#fff", textOverflow: "ellipsis", whiteSpace: "nowrap", overflow: "hidden" }), a("span.num", b).css({ right: ".5em", color: "#fff", fontStyle: "italic", fontFamily: 'Georgia, "Monotype Corsiva", Arial, sans-serif' }), a("em", b).css({ display: "inline-block", position: "relative" }), a("em.curr-num", b).css({ fontSize: "2.4em", height: "2em", lineHeight: "2em", color: "#cc191b", bottom: ".625em" }), a("em.total-num", b).css({ fontSize: "1.2em", height: "2em", lineHeight: "2em", top: ".6em" }), a("em.line", b).css({ width: "16px", height: "3em", background: "url(images/splash_white.png) center no-repeat" }) } }; p.init() }) } }) }(jQuery), $.extend($.easing, { easeOutExpo: function (a, b, c, d, e) { return b == e ? c + d : d * (-Math.pow(2, -10 * b / e) + 1) + c } }); 还有幻灯图片,按照路径添加到合适的位置即可实现幻灯片。PS(js是从上往下执行的,所以幻灯的按钮标签一定要放在js代码的前面,否则点击切换图片会失效)
如此这般,也可以实现轮播的效果.不过仍然有弊端,就是如果轮播图有A标签的话,将会跳转到文章页,而这个文章页除了轮播图什么内容都没有会比较尴尬.小编是把A标签写死了.如果谁有更好的方法欢迎指教.