Typecho随机显示文章

发布时间:August 3, 2015 // 分类:代码 // 6 条评论

随机文章在一定程度上是有利于SEO的抓取和更新的,Typecho自身并不带有随机文章的函数。网上有一个随即文章的插件,但已经是2012年的代码。其实,Typecho的随机文章是可以直接在模板代码里解决的。

网络上有一篇Typecho随机文章的代码《Typecho 随机文章(日志)函数》(http://t.160.me/83.html),但是有未到达发布时间文章提前泄漏的bug,所以本文对代码进行了改进并优化了SEO。

先在模板的function.php中加入随机文章函数代码:

function theme_random_posts(){
    $defaults = array(
        'number' => 5,
        'before' => '<ul class="list">',
        'after' => '</ul>',
        'xformat' => '<li><a href="{permalink}" title="{title}">{title}</a></li>'
    );
    $db = Typecho_Db::get();

    $sql = $db->select()->from('table.contents')
        ->where('status = ?','publish')
        ->where('type = ?', 'post')
        ->where('created <= unix_timestamp(now())', 'post') //添加这一句避免未达到时间的文章提前曝光
        ->limit($defaults['number'])
        ->order('RAND()');

    $result = $db->fetchAll($sql);
    echo $defaults['before'];
    foreach($result as $val){
        $val = Typecho_Widget::widget('Widget_Abstract_Contents')->filter($val);
        echo str_replace(array('{permalink}', '{title}'),array($val['permalink'], $val['title']), $defaults['xformat']);
    }
    echo $defaults['after'];
}

然后再需要调用随机文章的地方插入此代码(如sidebar.php):

<?php theme_random_posts();?>

这样,Typecho就可以很轻松地显示随机文章了。


后记:呵呵君在留言里这样说我就很尴尬了嘛~简单说一下方法吧。

可以将

'xformat' => '<li><a href="{permalink}" title="{title}">{title}</a></li>'

改成

'xformat' => '<li><a href="{permalink}" title="{title}">{title}</a><p>{text}</p></li>'

然后将

echo str_replace(array('{permalink}', '{title}'),array($val['permalink'], $val['title']), $defaults['xformat']);

改成

echo str_replace(array('{permalink}', '{title}', '{text}'),array($val['permalink'], $val['title'], cutArticle($val['text'],100)), $defaults['xformat']);

另外在function.php中增加一段将正文转成摘要的代码(COPY自http://blog.csdn.net/ei__nino/article/details/8675551):

function cutArticle($data,$cut=0,$str="....")  
{     
      
    $data=strip_tags($data);//去除html标记  
    $pattern = "/&[a-zA-Z]+;/";//去除特殊符号  
    $data=preg_replace($pattern,'',$data);  
    if(!is_numeric($cut))  
        return $data;  
    if($cut>0)  
        $data=mb_strimwidth($data,0,$cut,$str);  
      
      
    return $data;  
}  

这样就ok了。今天太晚了就没有实际测试,以后有精力再完善吧。其实还可以实现相当多拓展,在theme_random_posts的foreach中加入一行var_dump($val)就可以看到能够调用的内容。

PS:最终还是逃不过copy啊哈哈哈

本文固定链接
https://www.ywlib.com/archives/20.html

标签
php, typecho, 随机文章

已有 6 条 关于 " Typecho随机显示文章 "的评论.

  1. 大神,请教一下,我想调用随机文章,但需要显示标题和文章摘要,该怎么处理呢

    1. 呵呵

      大神也不会啊,大神复制粘贴的

      1. 你这样说的话我就很尴尬了哈哈哈~显示文章摘要需要多加一些代码,我更新在文章里

        1. 谢谢,好文章,非常喜欢,会常来拜读

  2. 小五

    大神 我想调用指定分类的随机文章 改怎么写呢?

  3. 楼上好像都搞定了,只有我一个人报错吗,我是放在post.php文章下面,想显示随机文章的,Fatal error: Call to undefined function getRandomPosts() in /www/users/HA430559/WEB/usr/themes/read/post.php on line 20

添加新评论 »

分类
随机文章
最新文章
最近回复
  • box: 好棒b( ̄▽ ̄)d
  • mi: /data/opkg update
  • alen chen: 我的是小米路由器mini ROM:開發版2.19.40
  • alen chen: 你好,看到你的文章如獲至寶,一舉解決了我多年想在小米路由器mini裡面安裝dlna的心願。一路...
  • hiicy: windows上最有效 最简单明了的方法!打电话!!
  • 梁兴健: 楼上好像都搞定了,只有我一个人报错吗,我是放在post.php文章下面,想显示随机文章的,Fa...
  • Jordan: Thanks!!!
  • Kent: 这一块我也只是玩一玩。。高深的都不懂其实哈哈哈
  • 紫色: 博主,有没有联系方式?邮箱QQ什么的,我最近在做人脸识别的课题,想请教一些问题。
  • Kent: 哈哈哈哈哈哈哈