端点SEO博客

系统化学习SEO技术,实时关注业界动态

无插件通过代码调用实现WordPress随机文章

最近由于工作比较忙,博客更新的比较少,所以想增通过调用随机文章来增加页面新鲜度,因为我们做SEO优化的都知道这样有利于提高快照的更新频率。

通过搜索一些相关的文章并且测试,现总结两种通过添加代码的方式来实现调用wordpress随机文章的方法:

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

使用方法如下:

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

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


1.向主题模板中添加

最直接的用法就是修改主题模板文件,通常放在single.php(文章模板)和sidebar.php(边栏模板),在需要的位置放入下面的代码。

<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子主题功能可完美规避此问题)


2. 修改主题 functions.php 文件

注意:只适用于 PHP 5.2+

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

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

将下面的代码直接放入主题的 functions.php 文件的 ?> 之前即可。如果当前使用的主题没有 functions.php 文件,可以在该主题的目录下自己创建一个,不过一定要注意代码是放在文档的 <?php  ?>之间。


代码( // 后为注释):

/**
 * Random_Posts widget class
 *
 * Author: 端点SEO博客 <http://www.iseoduan.com/>
 * Date: 2016.11.26, 端点SEO博客 2016 1.0
 */

class WP_Widget_myRandom_Posts extends WP_Widget {

    function __construct() {
        $widget_ops = array('classname' => 'widget_my_random_posts', 'description' => __( '端点SEO博客的随机文章小工具。' ) );
        parent::__construct('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']) ? __('随机文章') : $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>';
        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="Random-Posts" 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 费资源、但可定制化程度极高

缺点:麻烦。如果你不懂代码怕出错,请在添加代码之前备份你的functions.php 文件

wordpress无插件通过代码调用随机文章

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

除非注明,文章均由©端点SEO博客原创
转载请保留本文链接:http://www.iseoduan.com/phpkaiyuan/750.html
最后更新: 2016年12月12日 — 01:16
©2015~2017 | 端点SEO博客:揭露SEO本质,提供SEO培训,系统的学习SEO优化 备案号:京ICP备12011610号-3 站点地图|端点SEO博客