一.随机文章的获取原理

WordPress 的文章查询函数 get_posts() 有个参数 orderby 指明了获取文章时的排序方式。通常我们是按照文章发布日期排序,比如 WordPress 站点首页、分类页和标签页中的文章列表。orderby 还可以是 rand,它使用 MySQL 的 RAND() 函数来确定排序参数,也就是随机排序。

使用方法如下:

$args = array( 'numberposts' => 5, 'orderby' => 'rand', 'post_status' => 'publish' );
$rand_posts = get_posts( $args );

这样就能得到随机排序(第 2 个参数)的已发布(第 3 个参数)文章中的 5 篇(第 1 个参数)。

需要特别注意的是,如果没有第 3 个参数,它可能会将草稿之类的文章也显示出来。

二.向主题模板中添加

最直接的用法就是修改主题模板,在需要的位置放入下面的代码。

<ul>
<?php
$args = array( 'numberposts' => 5, 'orderby' => 'rand', 'post_status' => 'publish' );
$rand_posts = get_posts( $args );
foreach( $rand_posts as $post ) : ?><li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
<?php endforeach; ?>
</ul>

这样就能以列表的形式展示 5 篇带链接的随机文章。

优点:直接,可定制性强(可随意修改展示位置),消耗资源少

缺点:每次升级或更换主题都需要重新修改模板(使用子主题的话可能不需要每次升级都修改)

三.使用插件

WordPress 插件目录中的随机文章插件还不少。这里列举几个目前比较活跃和有特色的。

  1. AJAX Random Posts

    • 免费;
    • 使用 AJAX 技术在页面加载后获取随机文章,兼容 WordPress 缓存插件如 WP Super Cahe,可以在启用静态缓存的情况下保证各个页面的随机文章仍然是随机并随每次访问而变;
    • 高度可定制,包括文章数目、HTML 格式、标签(如文章链接、标题、分类、日期等)。
  2. Advanced Random Posts Widget:
    • 免费;
    • 高度可定制,包括显示缩略图(可自定义尺寸,但是没有深度加工因而可能比较丑陋)、摘要(可定制长度)、选择分类、日期等,可支持 get_the_image 函数和多个挂件。
  3. Random Post for Widget:
    • 免费,简洁;
    • 可定制显示文章数目,可排除制定 ID 的文章。
  4. WPSIREN Random Post by Click:
    • 免费;
    • 特色是显示一个打开一篇随机文章的按钮,并可对按钮样式进行深度定制。
  5. Random Post:
    • 基本功能免费;
    • 提供四种展示效果;
    • 可定制显示文章数目、自动更新以及自动更新时间;
    • 如果需要选择文章分类则需要购买高级版。
  6. Random Posts Widget Configurable:
    • 免费;
    • 可定制显示文章数目。

优点:方便、快捷

缺点:稍微增加了服务器负担;定制化性能取决于选用的插件

四.修改主题 functions.php 文件

注意:只适用于 PHP 5.2+

我的需求就是在 WordPress 后台中的“小工具”里增加一个“随机文章”的可用小工具,让我可以将其添加到边栏中作为微件显示出来。

现在我的 WordPress 中插件已经很多了,不希望增加太多的插件造成更多负担,所以就在主题的 functions.php 文件中增加了一个函数类来完成这个任务。

将下面的代码直接,或定制化修改后放入主题的 functions.php 文件中即可。如果当前使用的主题没有 functions.php 文件,可以在该主题的目录下自己创建一个,不过一定要注意在文档的开头输入 <?php,结尾输入 ?>

随机文章小工具在 WordPress 后台的位置和效果

成功后在 WordPress 后台的“小工具”页面可以找到对应的可用小工具(左图),添加到边栏后可设置微件标题和显示文章数目(右图)。页面显示效果如本页右上。

代码( // 后为注释):

/*** Random_Posts widget class** Author: haoxian_zeng <http://cnzhx.net/>* Date: 2013.05.14, cnzhx2011 1.0*/
//--------------- * 注册该微件
class WP_Widget_myRandom_Posts extends WP_Widget {function __construct() {$widget_ops = array('classname' => 'widget_my_random_posts', 'description' => __( '水景一页定制的随机文章微件。The cnzhx customized random posts widget.' ) );parent::__construct('random-posts', __('随机文章 Random Posts'), $widget_ops);$this->alt_option_name = 'widget_my_random_posts';}function widget( $args, $instance ) {global $randomposts, $post;extract($args, EXTR_SKIP);$output = '';// 设置 widget 标题$title = apply_filters('widget_title', empty($instance['title']) ? __('随机文章 Random Posts') : $instance['title']);// 设置要获取的文章数目if ( ! $number = absint( $instance['number'] ) )$number = 5;// WP 数据库查询,使用 rand 参数来获取随机的排序,并取用前面的 $number 个文章$randomposts = get_posts( array( 'number' => $number, 'orderby' => 'rand', 'post_status' => 'publish' ) );// 下面开始准备输出数据// 先输出一般的 widget 前缀$output .= $before_widget;// 输出标题if ( $title )$output .= $before_title . $title . $after_title;// random posts 列表开始$output .= '<ul id="randomposts">';if ( $randomposts ) {foreach ( (array) $randomposts as $post) {$output .= '<li><a href="' . get_permalink() . '">' . $post->post_title . '</a></li>';}}$output .= '</ul>';// 输出一般的 widget 后缀$output .= $after_widget;// 输出到页面echo $output;}function update( $new_instance, $old_instance ) {$instance = $old_instance;$instance['title'] = strip_tags($new_instance['title']);$instance['number'] = absint( $new_instance['number'] );$alloptions = wp_cache_get( 'alloptions', 'options' );if ( isset($alloptions['widget_my_random_posts']) )delete_option('widget_my_random_posts');return $instance;}//// 在 WP 后台的 widget 内部显示两个参数, 1. 标题;2. 显示文章数目//function form( $instance ) {$title = isset($instance['title']) ? esc_attr($instance['title']) : '';$number = isset($instance['number']) ? absint($instance['number']) : 5;?><p><label for="<?php echo $this->get_field_id('title'); ?>"><?php _e('Title:'); ?></label><input class="cnzhx" id="<?php echo $this->get_field_id('title'); ?>" name="<?php echo $this->get_field_name('title'); ?>" type="text" value="<?php echo $title; ?>" /></p><p><label for="<?php echo $this->get_field_id('number'); ?>"><?php _e('Number of posts to show:'); ?></label><input id="<?php echo $this->get_field_id('number'); ?>" name="<?php echo $this->get_field_name('number'); ?>" type="text" value="<?php echo $number; ?>" size="3" /></p><?php}
}// register WP_Widget_myRandom_Posts widget
add_action( 'widgets_init', create_function( '', 'return register_widget("WP_Widget_myRandom_Posts");' ) );

优点:比方法 1 费资源、比方法 2 省资源,可定制化程度极高

缺点:麻烦

文章转载自:http://cnzhx.net/blog/wordpress-random-posts/

转载于:https://www.cnblogs.com/wpjamer/articles/6664254.html

给 WordPress 博客添加随机文章的3个方法相关推荐

  1. php语录网站,杨泽业:给你的wordpress博客添加经典语录功能,适合所有php网站

    我们做一个网站就是要不断给访客 提供最佳的用户体验,同时 提升自己的品牌价值,而文章结束的经典语录的功能,完全可以实现我们所要达到的效果.(如下图) 给你的wordpress博客添加经典语录功能 这个 ...

  2. php插入音乐代码,如何修改Wordpress博客代码在文章中插入音乐 | 垃圾站

    垃圾站博客昨天在网上看到有一篇通过修改Wordpress博客代码在文章中插入音乐的教程,特此整理编辑后分享给大家,教程如下: 1.下载swf播放器(点击下载:player.swf )上传到Wordpr ...

  3. WordPress博客添加看板娘

    效果如下: WordPress博客添加看板娘(送37套服饰) 1.  从我的github下载压缩包 该压缩包已经自带37套服饰.支持换装功能.支持经典动漫台词展示.未来还会支持钉宫日语50音发声喔~ ...

  4. wordpress添加媒体_如何向您的WordPress博客添加表情符号支持

    wordpress添加媒体 Emojis are fun and cute. They allow you to express yourself without using too many wor ...

  5. 如何使WordPress博客添加多个sidebar侧边栏

    https://www.cnblogs.com/lydbk/p/4609736.html 如何使WordPress博客添加多个sidebar侧边栏 在制作wordpress模版的时候,也许你会遇到一个 ...

  6. wordpress博客添加新浪微博挂件

    我一直想着把我的新浪微博嵌入到博客中,今天抽空到网上搜索了一下相关的插件,没有找到.后来看到了一篇如何把微博嵌入WordPress博客的方法,终于实现成功了.感谢分享这些的朋友们. 一直想着把我的新浪 ...

  7. php如何添加音乐播放器,怎么为Wordpress博客添加MP3播放器

    怎么为Wordpress博客添加MP3播放器? 首先到Flash MP3 Player 的主页上下载该程序.解压缩之后,将 mp3player.swf 和 ufo.js 两个文件放到服务器上,这里假设 ...

  8. 给 WordPress 博客添加 Tabs 标签切换功能

    博客中的tabs切换信息展示效果已经不新鲜了,现在很多的Wordpress主题默认就提供Tabs选项卡功能,网上也有很多教程可以自己手动实现.使用Tabs切换功能,好处很多,最为明显的就是可以充分利用 ...

  9. 为wp博客添加html网页,WordPress博客添加B站追番页面

    Mashiro大佬博客也有追番页面,但是基于 Bangumi api 的太麻烦了,于是基于B站API写了一个追番页面模版,此模板理论适用于所有 WordPress 主题,但我只做了 Sakura 主题 ...

最新文章

  1. android unity 关闭应用_在后台运行的Android Unity应用程序
  2. PHP 配置文件详解(php.ini 详解 )
  3. python爬虫经典段子_Python爬虫实战(1):爬取糗事百科段子
  4. Python机器学习房价预测 (斯坦福大学机器学习课程)
  5. Fiddler代理配置
  6. Atitit 文件上传功能的实现 图片 视频 目录 1. 上传原理 1 1.1. http post编码 multipart / form-data 1 1.2. 临时文件模式 最简单 2 1.3
  7. 基于大数据可视化技术的毕业生就业分析服务项目 (软件创新设计期末报告)
  8. android手机鼠标,安卓手机变鼠标以及手机控制电脑图文教程
  9. AD9的PCB技巧——覆铜的规则设置
  10. 利用51单片机输出PWM波
  11. 8700k超频测试软件,双节+双核,i7 8700k +Z370 Extreme4超频测试
  12. uni-app打开第三方APP
  13. mysql 经纬度 距离 排序_MySQL根据经纬度按距离排序
  14. 物联网卡的6个应用案例全面解析
  15. 基于PLC等控制伺服3点坐标系计算
  16. 小桥加加的英语学习博客
  17. “老爸抽检”历时5年制订100个产品标准,老爸评测新模式要为消费者保驾护航
  18. rj45接口定义/rj45针脚定义/rj45引脚定义
  19. python处理excel数据分类汇总_python对Excel分类汇总
  20. 【机器学习】(四)一些数据集:forge、wave、cancer、bosten、two-moons

热门文章

  1. Python3bytes、hex、字符串之间相互转换
  2. 《从入门到精通云服务器》-4
  3. iOS设备控制打印机输出文本
  4. 5种不会被机器智能替代的能力
  5. 在张学友演唱会的6万观众中,AI锁定了一名逃犯
  6. range作用于对象global失败_彻底弄懂JavaScript作用域问题
  7. python面向对象的概念_Python面向对象概念和三要素
  8. 还在用 Swagger(丝袜哥)生成接口文档?我推荐你试试它。。。
  9. 代码全靠copy,Bug又烂又多,做程序员的目的是什么?
  10. 那些和闰年相关的 Bug