给 WordPress 博客添加随机文章的3个方法
一.隨機文章的獲取原理
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 插件目錄中的隨機文章插件還不少。這里列舉幾個目前比較活躍和有特色的。
- 免費;
- 使用 AJAX 技術在頁面加載后獲取隨機文章,兼容 WordPress 緩存插件如 WP Super Cahe,可以在啟用靜態緩存的情況下保證各個頁面的隨機文章仍然是隨機并隨每次訪問而變;
- 高度可定制,包括文章數目、HTML 格式、標簽(如文章鏈接、標題、分類、日期等)。
- 免費;
- 高度可定制,包括顯示縮略圖(可自定義尺寸,但是沒有深度加工因而可能比較丑陋)、摘要(可定制長度)、選擇分類、日期等,可支持 get_the_image 函數和多個掛件。
- 免費,簡潔;
- 可定制顯示文章數目,可排除制定 ID 的文章。
- 免費;
- 特色是顯示一個打開一篇隨機文章的按鈕,并可對按鈕樣式進行深度定制。
- 基本功能免費;
- 提供四種展示效果;
- 可定制顯示文章數目、自動更新以及自動更新時間;
- 如果需要選擇文章分類則需要購買高級版。
- 免費;
- 可定制顯示文章數目。
優點:方便、快捷
缺點:稍微增加了服務器負擔;定制化性能取決于選用的插件
?
四.修改主題 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个方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 孙丕恕:应把云计算大数据融在一起 降低社
- 下一篇: serialize-and-deseri