TypeCodes

wordpress添加滚动(单条或多条)公告

其实想给自己的博客加个公告栏好久了,但是一直都没找到比较合适的方法。对于CMS,我总有种纠结的心情。一来,CMS系统确实给开发人员带来了快捷的网站系统雏形,这点大大节省了各种资源和时间的消耗;但是,我觉得CMS又降低了开发人员自主创新的能力(一家之言^^),总是想依赖点什么。对于wordpress我也总期望官方能够发布所有我想要的功能,然后我只要copy就行了。。。结果然后就木有结果了。不罗嗦了,最终效果如下

wordpress添加滚动(单条或多条)公告

1、实现思路:借用wordpress中的一个页面,把其中的评论作为博客的公告内容。然后用jQuery实现单条或多条滚动。接下来是具体过程。

2、新建一篇文章或者一个单独页面(例如,博主是用自己制作的一个模板发布了“同步微博”页面),最好设置公开度为私密(这样访客就不能评论,从而公告只显示博主的评论)。后台发布后,鼠标移到页面的标题上,可以看浏览器左下角页面id。例如post.php?post=178&action=edit。178就是这个页面的ID,记下来。

3、在合适的位置添加公告栏,例如我把它添加在博客的侧栏,也就是在sidebar.php中添加代码

<!--notice by vfhky-->
<div class="notice">
    <?php include('includes/notice.php'); ?><!--引入notice.php文件-->
</div>

4、新建notice.php文件(调用评论内容),保存到自己主题文件夹下的include文件夹中

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
<h3>同步微博 vs 公告栏< ?php if ($user_ID) echo '&nbsp;&nbsp[<a href="' . get_page_link($page_ID) . '#respond" rel="nofollow" >发布公告]'; ?></h3>
<ul class="notice">
    <?php
        $page_ID=178; //用来作为公告栏的页面或者文章ID值
        $num=3; //显示公告的条数
        $announcement = '';//设置变量值为空
        $comments = get_comments("number=$num&post_id=$page_ID&user_id=1");//获取评论(包括内容、链接等等)
        if ( !empty($comments) ) {
            foreach ($comments as $comment) {
            $comment_result=$comment->comment_content;//获取评论内容
            if(strlen($comment_result)>60){$comment_result = cut_str($comment_result,60)."....";}//如果内容大于60,则截取60字并在后面跟上省略号
            $comm_link = get_comment_link($comment->comment_ID);//获取评论链接
            $announcement .= '<li><a rel="nofollow" href='.$comm_link.' style="color:#f90;font-size:1em;">@ TypeCodes </a>'. convert_smilies($comment_result) . ' <span style="color:#999;">(' . get_comment_date('Y/m/d H:i',$comment->comment_ID) . ')</span><hr style="border:1px dashed #cccccc; height:1px"/></li>';   
            }
        }
        if ( empty($announcement) ) $announcement = '<li>欢迎光临 TypeCodes !</li>';
            echo $announcement;
    ?>
</ul>

5、这样,评论内容就变成了公告内容。接下来我们需要用jQUery让公告内容变成单条或多条滚动的形式。由于在前面几篇文章中,我已经上传了jquery.min.js(例如文章如何在wordpress回复内容前面添加@方式),所以这个步骤我就不用做了。

6、根据自己想要实现单条滚动还是多条滚动样式,选择以下jQuery代码中的一个,并命名为notice.js,然后保存到主题所在的js目录下。

/* @notice单条 js by vfhky */
jQuery(document).ready(function($){ //Begin jQuery

    $("#notice li:not(:first)").css("display","none");
    var B=$("#notice li:last");
    var C=$("#notice li:first");
    setInterval(function(){
    if(B.is(":visible")){
    C.fadeIn(500).addClass("in");B.hide()
    }else{
    $("#notice li:visible").addClass("in");
    $("#notice li.in").next().fadeIn(500);
    $("li.in").hide().removeClass("in")}
    },6000) //每6秒钟切换一条,你可以根据需要更改

})  //End jQuery


/* @notice多条 js by vfhky */
jQuery(document).ready(function($){ //Begin jQuery

$(function(){
var _wrap=$('ul.notice');//定义滚动区域
var _interval=6000;//定义滚动间隙时间
var _moving;//需要清除的动画
_wrap.hover(function(){
clearInterval(_moving);//当鼠标在滚动区域中时,停止滚动
},function(){
_moving=setInterval(function(){
var _field=_wrap.find('li:first');//此变量不可放置于函数起始处,li:first取值是变化的
var _h=_field.height();//取得每次滚动高度(多行滚动情况下,此变量不可置于开始处,否则会有间隔时长延时)
_field.animate({marginTop:-_h+'px'},600,function(){//通过取负margin值,隐藏第一行
_field.css('marginTop',0).appendTo(_wrap);//隐藏后,将该行的margin值置零,并插入到最后,实现无缝滚动
})
},_interval)//滚动间隔时间取决于_interval
}).trigger('mouseleave');//函数载入时,模拟执行mouseleave,即自动滚动
});

})

7、加载jQuery库:依然在主题目录中找到header.php,再找到找到 <?php wp_head();?> ,然后在它前面添加如下代码

<!--Google CDN提供的jQuery库的地址采用了协议相对路径,它可以很好的解决https引起的一些问题-->
<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>

<!--当谷歌提供的jquery都无法载入时,我们需要载入本地备份的jquery.min.js文件-->
<script type="text/javascript">window.jQuery || document.write('</script><script type="text/javascript" src="<? php bloginfo('template_directory'); ?>/js/jquery.min.js">\x3C/script>')</script>

<script type="text/javascript" src="<? php bloginfo('template_directory'); ?>/js/notice.js"></script>

8、到这里,我们添加的公告内容就能滚动了。但是,公告内容会溢出公告栏目框。所以,我们还需要用CSS来隐藏溢出的公告内容,这样就perfect了!!!找到主题下面的style.css,然后添加

.notice{overflow:hidden;height:100px;line-height:18px;font-size:12px;}

9、ok,慢慢欣赏下自己的成果吧^^(PS:由于要涉及数据库的查询,网页的载入速度会变慢。所以,对于使用国外空间的童鞋们,你们自己看着办咯)

————Update 2013.02.21————

近段时间琢磨着如何提高博客网页的载入速度,所以把右侧栏的公告完善了一下。由于php中include的方法比较耗资源,所以我把公告代码修改到主题functions.php中,然后在sidebar.php中调用即可。具体做法如下:

(一)在sidebar.php中添加如下代码

<div class="notice">
    <ul class="notice"><?php get_notice(); ?></ul>
</div>

(二)在主题functions.php中添加如下代码:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
//blog notice by vfhky 0
function get_notice(){
    $page_ID=178; //用来作为公告栏的页面或者文章id
    $num=3; //显示公告的条数
    $announcement = '';//设置变量值为空
    $comments = get_comments("number=$num&post_id=$page_ID&user_id=1$comment_parent=0");//获取评论(包括内容、链接等等)
    if ( !empty($comments) ) {
        $i = 1;
        foreach ($comments as $comment) {
        $comment_result = mb_strimwidth($comment->comment_content,0,200,"....");
        $comm_link = get_comment_link($comment->comment_ID);//获取评论链接
        $announcement .= '<li><a rel="nofollow" href='.$comm_link.' title="同步微博" style="color:#f90;font-size:11px;">@ TypeCodes +'.$i.'</a><font size="1px">'. convert_smilies($comment_result) . '</font> <span style="color:#999;font-size:10px;">(' . get_comment_date('Y-m-d H:i',$comment->comment_ID) . ')</span><div style="width:100%;border-top:1px dashed #cccccc;"></div></li>'; 
        $i += 1;}
    }
    if ( empty($announcement) ) $announcement = '<li>欢迎光临 TypeCodes !</li>';
    echo $announcement;
}

(三)OVER

打赏支持

Comments »