在用WordPress建立个人博客一文中,将WordPress自带的主题Twentyeleven做了一些小修改,定制化成有自己特色的主题。本文将描述如何为Twentyeleven添加幻灯片功能,并带有简单的后台管理功能。
先看看这款主题的样子
如果在网站头部和菜单之间再加一个幻灯片,就失去了这款主题简洁的优势,索性直接将头部改成幻灯片,让网站Logo和搜索框悬浮在幻灯片上面。
目录
示例主题下载
修改前:[download id=23]
增加幻灯片[完成版]:[download id=24]
PS. 该主题已经更新为简化版,移植到自己主题中的简单步骤见下文引用文字
幻灯片图片(1000×165像素):[download id=25]
这两个都是TwentyEleven的Child Theme,安装到后台激活主题即可。
如果你需要将幻灯片功能移植到自己的主题中
1. 将压缩包中的slideshow文件夹拷贝到主题根目录
2. 在主题的functions.php中添加代码
include "slideshow/slider-init.php";3. 在需要展示幻灯片的地方,例如header.php中,添加代码
include 'slideshow/slider.php';That's all!
创建幻灯片
安装主题后,后台会出现一个新的菜单项叫做“幻灯片”,点击“写文章”创建一个幻灯片,文章的特色图像就是幻灯片的图片。每篇文章设置一个幻灯片,假设我们要设置三幅图片切换,那么创建三篇“幻灯片”类型的文章。
如果操作成功,那么刷新首页就可以看到幻灯片切换效果了。
修改步骤概述
- 在主题的functions.php中注册新的post type,就起名叫“幻灯片”,经过这一步,后台会出现一个菜单项叫幻灯片,使用方法与编辑文章类似。
- 幻灯片用Nivo Slider,之前收集了17款Nivo Slider皮肤,这下派上用场了,选择一款皮肤,将要用到的js文件拷贝到主题的js目录下(创建一个js目录),将用到的图片拷贝到主题的images目录下,将幻灯片的CSS拷贝到主题的style.css中。
- 主题目录下创建一个文件叫slider.php,这个文件产生Nivo Slider需要的HTML结构,它会读取用户创建的幻灯片文章,输出幻灯片的HTML代码,并初始化幻灯片。
- 修改主题的header.php,在适当位置引入slider.php文件。
- 到仪表盘->幻灯片下 创建三篇文章,文章中设置特色图像,特色图像就是幻灯片中显示的图片。保存,大功告成。
修改步骤-代码版
1. 主题的functions.php中添加如下代码,完成两件事,第一、注册幻灯片用到的图片尺寸;第二、增加幻灯片类型的文章支持。
//设置主题 add_action( 'after_setup_theme', 'my_setup' ); if ( ! function_exists( 'my_setup' ) ): function my_setup() { // This theme uses post thumbnails if ( function_exists( 'add_theme_support' ) ) { // Added in 2.9 add_theme_support( 'post-thumbnails' ); add_image_size( 'slider-post-thumbnail', 1000, 165, true ); // Slider Thumbnail } } endif; //register post types /* Slider */ function my_post_type_slider() { register_post_type( 'slider', array( 'label' => __('幻灯片'), 'singular_label' => __('幻灯片', 'twentyeleven'), '_builtin' => false, 'exclude_from_search' => true, // Exclude from Search Results 'capability_type' => 'page', 'public' => true, 'show_ui' => true, 'show_in_nav_menus' => false, 'rewrite' => array( 'slug' => 'slide-view', 'with_front' => FALSE, ), 'query_var' => "slide", // This goes to the WP_Query schema 'menu_icon' => get_bloginfo('stylesheet_directory') . '/includes/images/icon_slides.png', 'supports' => array( 'title', 'custom-fields', 'editor', 'thumbnail') ) ); } add_action('init', 'my_post_type_slider');
2. 将jquery.nivo.slider.pack.js拷贝到主题的js目录下,将slider皮肤图片拷贝到主题的images目录下,将下面的css拷贝到主题的style.css中。
/* =Nivo Slider ----------------------------------------------- */ .theme-theme1210 { height:165px; width:1000px; overflow:hidden; position:absolute; top:0; left:0; z-index:-1; } .theme-theme1210 .nivoSlider { position:relative; width:1000px; height:165px; } .theme-theme1210 .nivoSlider img { position:absolute; top:0px; left:0px; display:none; } .theme-theme1210 .nivoSlider a { border:0; display:block; } .theme-theme1210 .nivoSlider a.nivo-imageLink { position:absolute; top:0px; left:0px; width:100%; height:100%; border:0; padding:0; margin:0; z-index:60; display:none; } .theme-theme1210 .nivo-slice { display:block; position:absolute; z-index:50; height:100%; } .theme-theme1210 .nivo-box { display:block; position:absolute; z-index:5; } .theme-theme1210 .nivoSlider a { border:0; display:block; } .theme-theme1210 .nivo-controlNav { position:absolute; width:940px; height:11px; left:0; bottom:-29px; text-align:center; } .theme-theme1210 .nivo-controlNav a { position:relative; z-index:99; cursor:pointer; display:inline-block !important; width:12px; height:11px; border-radius:6px; background:url('images/bullets.png') no-repeat 100% 0; margin:0 1px; text-decoration:none; line-height:11px; font-size:0; color:#dbdbdb; } .theme-theme1210 .nivo-controlNav a:hover, .theme-theme1210 .nivo-controlNav a.active { background-position: 0 0; } .theme-theme1210 .nivo-directionNav a { cursor:pointer; position:absolute; display:block; width:66px; height:66px; text-indent:-9999px; border:0; top:50%; margin-top:-33px; background:url('images/direction_nav.png') no-repeat 0 0; z-index:99; } .theme-theme1210 a.nivo-nextNav { right:5px; background-position:-66px 0; } .theme-theme1210 a.nivo-nextNav:hover { background-position:-66px -66px; } .theme-theme1210 a.nivo-prevNav { left:5px; background-position:0 0; } .theme-theme1210 a.nivo-prevNav:hover { background-position:0 -66px; } .theme-theme1210 .nivo-controlNav img { display:inline; /* Unhide the thumbnails */ position:relative; margin-right:10px; width:120px; height:auto; } .theme-theme1210 .nivo-controlNav img { display: inline; /* Unhide the thumbnails */ position: relative; width: 127px; height: 101px; margin: 0; } .theme-theme1210 .nivo-caption { position:absolute; left:0px; bottom:0px; color:#fff; opacity:0.8; /* Overridden by captionOpacity setting */ width:100%; z-index:89; } .theme-theme1210 .nivo-caption .nivo-caption-inner { padding:0; margin:0; } .theme-theme1210 .nivo-html-caption { display:none; }
注意:nivo slider的宽度和高度需要做一定的更改,上面的代码已经改好了,如果使用其他皮肤,请注意尺寸。
3. slider.php的内容
<?php query_posts("post_type=slider&posts_per_page=-1&post_status=publish"); if( have_posts() ): ?> <div class="slider-wrapper theme-theme1210"> <div id="slider" class="nivoSlider"> <?php $posts_counter = 0; ?> <?php while ( have_posts() ) : the_post(); $posts_counter++; ?> <?php $sl_image_url = wp_get_attachment_image_src( get_post_thumbnail_id($post->ID), 'slider-post-thumbnail'); $tab_title = get_post_custom_values("tab-title"); ?> <?php if(has_post_thumbnail( $the_ID) ){ echo "<img src='".$sl_image_url[0]."' alt='".$tab_title[0]."' title='#sliderCaption".$posts_counter."' />"; } ?> <?php endwhile; ?> <?php rewind_posts(); ?> </div> <!-- #slider --> <?php $posts_counter = 0; ?> <?php while ( have_posts() ) : the_post(); $posts_counter++; ?> <?php $custom = get_post_custom($post->ID); ?> <div id="sliderCaption<?php echo $posts_counter ?>" class="nivo-html-caption"> <?php the_content(); ?> </div> <?php endwhile; ?> </div> <!-- .slider-wrapper --> <script type="text/javascript"> jQuery(window).load(function() { // nivoslider init jQuery('#slider').nivoSlider({ effect: 'fade', animSpeed:800, pauseTime:3000, directionNav:false, directionNavHide:false, controlNav:false, captionOpacity:0.8 }); }); </script> <?php else: ?> <p style=" position:absolute; top:0; left:0; width:988px;padding:5px; border:2px dashed #99FF00; background:#FFFF99; text-align:center;">访问仪表盘->幻灯片添加幻灯片。为获得最佳展示效果,图片尺寸应为1000×165像素 要禁用幻灯片,编辑主题目录下的header.php,删除代码<?php include 'slider.php'; ?> <?php endif; ?> <?php wp_reset_query();?>
代码大致做了四件事
- 用query_posts()读取post type是slider的post。
- 第一个while循环输出slider的图片,最后用rewind_posts()函数将数组指针重新指向第一篇文章
- 第二个while循环输出nivo slider的caption,如果你在幻灯片文章中输入了内容,内容就会被用作caption。
- 最后用wp_reset_query()函数将主循环复位,因为使用query_posts()会修改主循环数据,主循环应该输出我们的博客文章,而不是幻灯片的文章。我们只是用query_posts()做了一个自定义查询,查询结束后一定要将数据复位。
4. 编辑header.php
找到
<header id="branding" role="banner"> <hgroup>
在后面增加
<?php include 'slider.php'; ?>
5. 创建幻灯片,然后刷新首页,查看效果。
博主好人,收下了
这篇文章是很久以前的,脚本和方法都已经变了,最好找一些新鲜出炉的文章看看。
嗯 我看过了 我做了一些修改 只是后台有一些不好看 其他的一切都好用
其实后台可以用advanced custom fields来做,好看又好用
我喜欢不用插件的 能尽力不使用插件就不使用
有些插件确实少用为好,但acf这个插件绝对能让你的生活更美好。
博主好,这个方法简单易行,唯一遗憾是不支持响应式,能否简单改进呢?是不是要更新js了?
这个方法就是把一段slideshow js脚本揉进WordPress,可以重用的是后台管理和前台输出的代码。
换成别的slideshow脚本一样,只要按照相应脚本的要求输出html结构,再换上它的css样式表就行了。
Responsive slideshow脚本很多,例如:
http://www.woothemes.com/flexslider/
http://responsiveslides.com/
http://bxslider.com/
非常感谢!
求救啊~用了直接引入的方式,但是控制按钮点击无效,而且当幻灯片播完一次会出现一段时间的空白然后才再次循环…
博客更换过代码高亮插件,所以php代码符号有些问题,代码也有点太旧了,WordPress4.1的兼容性不敢保证哦,等我有空更新一下吧,做幻灯片可以用插件的。
嗯,已经解决了,现在就是控制按钮无法使用,隐藏了。
完整版,没资源了?
为了尽量精简代码。我想这样····不好描述,举实例吧。
一般的插件(代买),必须这种形式(能点击打开)才可以实现幻灯片效果,
img
我想问的是,如何让这样形式的也能实现幻灯片效果呢?
抱歉,我不太明白你的意思。跟点击打开有什么关系?
幻灯片的实现方法比较多,你想简化代码对吗,那你先说下你用了哪种实现方法?
看起来是系统把我的html代码给吞了···
我的意思是:怎么才能实现给“没有添加超链接的图片”增加幻灯片效果
slideshow的图片一定要添加超链接吗?貌似没有这条要求啊?我这篇文章的例子也没给img加a标签啊?
一般的插件和代码都要求要a标签,好像是说这样才能触发JS。
您这篇文章有a标签,且没有slideshow。。
不过咱们实际上是误会了,你说的是首页的slideshow。
我说 的是文章中图片的一个幻灯片效果···汗
我想幻灯片跟它在首页header还是文章中没必然联系吧,不然我想我真的不知道你说的什么意思。随便举一个幻灯片脚本的例子,http://responsiveslides.com/,貌似没要求有a标签,不知道你在哪里看文章说必须有a了。幻灯片可以理解为几个div轮番切换位置,既然是div,里面放什么都行,文字图片链接。
文章中图片的一个幻灯片效果?一张图片用得着幻灯片效果吗?放大或者灯箱效果都说的通,或者是一个gallery的幻灯片效果。
伸手党感谢博主的幻灯片主题
不客气,有问题欢迎讨论。
很赞的实现方法,唯一的缺憾是幻灯片文章不能归属到当前的网站分类中,或者是在发布文章时候直接设置为幻灯片
你说的没错,用custom post type实现不了。但可以用post-formats实现
add_theme_support( ‘post-formats’, array( ‘slide’ ) );
发布文章时将文章设置成slide类型,就自动加到幻灯片中
或者用custom field,比如加一个featured字段,设置为true的文章就会加到幻灯片
个人感觉幻灯片不会显示太多文章,用custom post type管理更方便,而且能设置幻灯片链接到哪篇文章
代码还是门外汉,求这两种方法的代码解决方案。
写了第二种方法的代码https://www.solagirl.net/wordpress-slideshow-based-on-post-meta-box.html
第一种方法中犯了个错误,post-formats支持的格式是wordpress规定的,只有aside,gallery,link,image,quote,status,video,audio,chat。post-formats的初衷是用来展示不同格式的文章的,貌似用在这里不合适。所以实现直接推送文章到幻灯片的功能用post meta box就行了。
延伸一下,还可以将置顶文章推送到幻灯片中。
怎么设置幻灯片链接到那一片文章
你可以在description里写个learn more之类的链接啊
要么就用custom field写链接,再在slider模版里用get_post_meta调用