为 WordPress 添加“随机文章”小工具

add-random-post-widget

当网站的文章增多后,可以通过目录、标签、日历、存档、关联等方式查看之前的文章,但这还不是方便和直观的方法,通过创建 “随机文章” 小工具,可以比较方便和快速地调取以前的文章,而且小工具可以通过后台管理工具方便地加入到页面不同的位置。

在 WordPress 中增加小工具的方法在之前的文章中有过介绍,可以参考。随机文章小工具的实现方法是一样的,只是提取文章的参数不同,代码如下(具有标签菜单的功能):

class RandomPostWidget extends WP_Widget
{
	function RandomPostWidget()
	{
		parent::WP_Widget('random_post_entries', '随机文章', array('description' =>  '随机文章小工具') );
	}

	function widget($args, $instance)
	{
		extract( $args );

		$title = apply_filters('widget_title',empty($instance['title']) ? '随机文章' : $instance['title'], $instance, $this->id_base);
		if ( empty( $instance['number'] ) || ! $number = absint( $instance['number'] ) )
		{
			$number = 10;
		}

		$r = new WP_Query(array('cat' => '36', 'posts_per_page' => $number, 'no_found_rows' => true, 'post_status' => 'publish', 'ignore_sticky_posts' => true, 'orderby' =>'rand'));
		$o = new WP_Query(array('cat' => '4', 'posts_per_page' => $number, 'no_found_rows' => true, 'post_status' => 'publish', 'ignore_sticky_posts' => true, 'orderby' =>'rand'));
		if ($r->have_posts() || $o->have_posts())
		{
			echo "\n";
			echo $before_widget;
			if ( $title ) echo $before_title . $title . $after_title;
?>
<div class="tab-wrapper">
<ul class="tab-menu">
<li class="active">游记</li>
<li>技术</li>
</ul>
<div class="tab-content">
<div>
<ul class="line">
<?php while ($r->have_posts()) : $r->the_post(); ?>
<li><a href="<?php the_permalink() ?>" title="<?php echo esc_attr(get_the_title() ? get_the_title() : get_the_ID()); ?>"><?php if ( get_the_title() ) the_title(); else the_ID(); ?></a></li>
<?php endwhile; ?>
</ul>
</div>
<div style="display: none;">
<ul class="line">
<?php while ($o->have_posts()) : $o->the_post(); ?>
<li><a href="<?php the_permalink() ?>" title="<?php echo esc_attr(get_the_title() ? get_the_title() : get_the_ID()); ?>"><?php if ( get_the_title() ) the_title(); else the_ID(); ?></a></li>
<?php endwhile; ?>
</ul>
</div>
</div>
</div>
<?php
	echo $after_widget;   
	wp_reset_postdata();   
		} 
	}

	function update($new_instance, $old_instance)   
	{
		$instance = $old_instance;
		$instance['title'] = strip_tags($new_instance['title']);
		$instance['number'] = (int) $new_instance['number'];
		return $instance;
	}

	function form($instance)
	{
		$title = isset($instance['title']) ? esc_attr($instance['title']) : '';
		$number = isset($instance['number']) ? absint($instance['number']) : 10;?>
<p><label for="<?php echo $this->get_field_id('title'); ?>"><?php _e('Title:'); ?></label>
<input 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   
	}

}
add_action('widgets_init', create_function('', 'return register_widget("RandomPostWidget");'));

把上面的代码添加到 functions.php 中。

发表评论

邮箱地址不会被公开。 必填项已用*标注