不用插件定制WordPress小工具(widget)标签云的方法

十二月 28
磊子 2011年 6 条评论

今儿上午把定制WordPress标签云插件汉化版的方法给大家讲解了下而且提供了下载,地址是http://www.favortt.com/wordpress-color-tag-plugin.html大家有需要的可以去看下,现在为大家说一下不使用插件的实现方法。这篇文章代码量会比较多一点,所以一些之前讲到的内容在这里就不在说了。比如创建小工具(widget)的方法,不清楚的还是先看下这两篇文章http://www.favortt.com/wordpress-widget-shuoming.htmlhttp://www.favortt.com/wordpress-widget-jiangjie-2.html

<?php

class Lei_TagCloudWidget extends WP_Widget_Tag_Cloud {

//和之前的评论小工具的方法一样,这里继承的是默认标签小工具的类名。

	function Lei_TagCloudWidget() {
		$widget_ops = array('classname' => 'widget_lei_tagcloud_comments', 'description' => __('Lei - 标签云','leizi') );
		$this->WP_Widget('lei-tagcloud-comments', __('Lei - 标签云','leizi'), $widget_ops);
	}

        //上面的内容是小工具的一些命名

	function widget( $args, $instance ) {
		extract($args);
		$nums = empty($instance['nums'])? 45 : $instance['nums'];
		$ordertag = empty($instance['ordertag'])? 'ASC' : $instance['ordertag'];
		$orderbytag = empty($instance['orderbytag'])? 'name' : $instance['orderbytag'];
		$tagformat = empty($instance['tagformat'])? 'pt' : $instance['tagformat'];
		$tagbigsize = empty($instance['tagbigsize'])? '22' : $instance['tagbigsize'];
		$tagsmallsize = empty($instance['tagsmallsize'])? '8' : $instance['tagsmallsize'];
		$current_taxonomy = $this->_get_current_taxonomy($instance);
		if ( !empty($instance['title']) ) {
			$title = $instance['title'];
		} else {
			if ( 'post_tag' == $current_taxonomy ) {
				$title = __('Tags');
			} else {
				$tax = get_taxonomy($current_taxonomy);
				$title = $tax->labels->name;
			}
		}
		$title = apply_filters('widget_title', $title, $instance, $this->id_base);

		echo $before_widget;
		if ( $title )
			echo $before_title . $title . $after_title;
		echo '<div class="tagcloud">';
		wp_tag_cloud( apply_filters('widget_tag_cloud_args', array(
		'smallest' => $tagsmallsize,
		'largest' => $tagbigsize,
		'unit' => $tagformat,
		'number' => $nums,
		'orderby' => $orderbytag,
		'order' => $ordertag,
		'taxonomy' => $current_taxonomy
		)));
		echo "</div>\n";
		echo $after_widget;
	}

		function update( $new_instance, $old_instance ) {
		$instance['title'] = strip_tags(stripslashes($new_instance['title']));
		$instance['taxonomy'] = stripslashes($new_instance['taxonomy']);
		$instance['nums'] = stripslashes($new_instance['nums']);

		$instance['ordertag'] = stripslashes($new_instance['ordertag']);
		$instance['orderbytag'] = stripslashes($new_instance['orderbytag']);
		$instance['tagformat'] = stripslashes($new_instance['tagformat']);
		$instance['tagbigsize'] = stripslashes($new_instance['tagbigsize']);
		$instance['tagsmallsize'] = stripslashes($new_instance['tagsmallsize']);
		return $instance;
	}

//上面这些部分就是用来显示的了。代码量多但是结构都是一样的,里面重要的部分就是使用了wp_tag_cloud()这个函数。根据这个函数的参数来添加对应的选项。这个函数磊子会在函数讲解页面那边写出来。

	function form( $instance ){
		$current_taxonomy = $this->_get_current_taxonomy($instance);
?>
	<p><label for="<?php echo $this->get_field_id('title'); ?>"><?php _e('标题:') ?></label>
	<input type="text" class="widefat" id="<?php echo $this->get_field_id('title'); ?>" name="<?php echo $this->get_field_name('title'); ?>" value="<?php if (isset ( $instance['title'])) {echo esc_attr( $instance['title'] );} ?>" /></p>
	<p><label for="<?php echo $this->get_field_id('taxonomy'); ?>"><?php _e('分类法:') ?></label>
	<select class="widefat" id="<?php echo $this->get_field_id('taxonomy'); ?>" name="<?php echo $this->get_field_name('taxonomy'); ?>">
	<?php foreach ( get_object_taxonomies('post') as $taxonomy ) :
				$tax = get_taxonomy($taxonomy);
				if ( !$tax->show_tagcloud || empty($tax->labels->name) )
					continue;
	?>
		<option value="<?php echo esc_attr($taxonomy) ?>" <?php selected($taxonomy, $current_taxonomy) ?>><?php echo $tax->labels->name; ?></option>
	<?php endforeach; ?>
	</select></p>

	 <p><label for="<?php echo $this->get_field_id('nums'); ?>"><?php _e('显示的数量(默认是45个):') ?></label>
	<input type="text" class="widefat" id="<?php echo $this->get_field_id('nums'); ?>" name="<?php echo $this->get_field_name('nums'); ?>" value="<?php if (isset ( $instance['nums'])) {echo esc_attr( $instance['nums'] );} ?>" /></p>

     <p><label for="<?php echo $this->get_field_id('orderbytag'); ?>"><?php _e('排序依据(默认是名称):') ?></label>
	<select  class="widefat" id="<?php echo $this->get_field_id('orderbytag'); ?>" name="<?php echo $this->get_field_name('orderbytag'); ?>">
    <option value="">- <?php echo __('请选择','');?> -</option>
    <option <?php if ( $instance['orderbytag'] == 'name') echo 'selected="SELECTED"'; else echo ''; ?>  value="name"><?php  echo __('标签名称');?></option>
    <option <?php if ( $instance['orderbytag'] == 'count') echo 'selected="SELECTED"'; else echo ''; ?> value="count"><?php echo __('使用次数');?></option>
    </select>
    	</p>

     <p><label for="<?php echo $this->get_field_id('ordertag'); ?>"><?php _e('排序(默认是升序):') ?></label>
	<select  class="widefat" id="<?php echo $this->get_field_id('ordertag'); ?>" name="<?php echo $this->get_field_name('ordertag'); ?>">
    <option value="">- <?php echo __('请选择','');?> -</option>
    <option <?php if ( $instance['ordertag'] == 'ASC') echo 'selected="SELECTED"'; else echo ''; ?>  value="ASC"><?php  echo __('升序');?></option>
    <option <?php if ( $instance['ordertag'] == 'DESC') echo 'selected="SELECTED"'; else echo ''; ?> value="DESC"><?php echo __('降序');?></option>
    <option <?php if ( $instance['ordertag'] == 'RAND') echo 'selected="SELECTED"'; else echo ''; ?> value="RAND"><?php echo __('随机');?></option>
    </select>
    	</p>

     <p><label for="<?php echo $this->get_field_id('tagformat'); ?>"><?php _e('显示标签尺寸格式(默认是pt点数):') ?></label>
    <select  class="widefat" id="<?php echo $this->get_field_id('tagformat'); ?>" name="<?php echo $this->get_field_name('tagformat'); ?>">
    <option value="pt">- <?php echo __('请选择','');?> -</option>
    <option <?php if ( $instance['tagformat'] == 'px') echo 'selected="SELECTED"'; else echo ''; ?>  value="px"><?php  echo __('px(像素)');?></option>
    <option <?php if ( $instance['tagformat'] == 'em') echo 'selected="SELECTED"'; else echo ''; ?> value="em"><?php echo __('em(长度)');?></option>
    <option <?php if ( $instance['tagformat'] == '%') echo 'selected="SELECTED"'; else echo ''; ?> value="%"><?php echo __('%(百分比)');?></option>
    </select>
	</p>
    	 <p><label for="<?php echo $this->get_field_id('tagsmallsize'); ?>"><?php _e('显示最大标签尺寸(默认是8):') ?></label>
	<input type="text" class="widefat" id="<?php echo $this->get_field_id('tagsmallsize'); ?>" name="<?php echo $this->get_field_name('tagsmallsize'); ?>" value="<?php if (isset ( $instance['tagsmallsize'])) {echo esc_attr( $instance['tagsmallsize'] );} ?>" /></p>

    	 <p><label for="<?php echo $this->get_field_id('tagbigsize'); ?>"><?php _e('显示最小标签尺寸(默认是22):') ?></label>
	<input type="text" class="widefat" id="<?php echo $this->get_field_id('tagbigsize'); ?>" name="<?php echo $this->get_field_name('tagbigsize'); ?>" value="<?php if (isset ( $instance['tagbigsize'])) {echo esc_attr( $instance['tagbigsize'] );} ?>" /></p>

	<?php

       //上面这些内容就是后台小工具那边标签的一些配置选项,下面会有示例图。每个功能的意思里面已经有写明

	}
}
?>

将这些代码进行保存激活后(如果不清楚怎么在这个地址浏览下http://www.favortt.com/wordpress-widget-comment.html)我们就可以在wordpress后台小工具(widget)地方看到如下图:

标签小工具然后拖动到侧边栏的相应位置后我们可以对这个wordpress标签进行设置,如下图:

标签小工具设置

这样我们就成功的定制好一个wordpress标签云小工具了。如果你还需要添加彩色的标签,那么将下面的这些代码放到主题的functions.php里面。

function lei_color_tag($text) {
$text = preg_replace_callback('|<a (.+?)>|i', 'colortag', $text);
return $text;
}
function colortag($matches) {
$text = $matches[1];
$color = dechex(rand(0,16777215));
$pattern = '/style=(\'|\")(.*)(\'|\")/i';
$text = preg_replace($pattern, "style=\"color:#{$color};$2;\"", $text);
return "<a $text>";
}
add_filter('wp_tag_cloud', 'lei_color_tag', 1);

//随机的显示标签的颜色

OK,完成!这篇文章代码还是比较多的,不过里面的内容是没有多大变化的。主要就是添加了多个选项内容,主要的就是使用了wp_tag_cloud这个函数。然后将里面的那些参数做成了一个一个的选项显示出来!有需要的可以来这个地方看下函数的使用方法。http://www.favortt.com/wp_tag_cloud.html

» 版权所有©转载必须以链接形式注明作者和原始出处:磊子的博客 » 不用插件定制WordPress小工具(widget)标签云的方法
» 地址:( Ctrl+C 复制 )
» 如果对本站感兴趣,请到网站右下方订阅本站,将为你带来更多精彩和实用的文章
» 如果您对这篇文章感兴趣,不妨小小的 捐助(Donate)一下博主吧,不管多少都是对博主最大的支持和鼓励哟,博主-磊子感谢大家的支持!!!

6 条留言 其中:访客:3 条, 博主:3 条

  1. 磊哥也要注意下版面啊,你看那些代码都射到右边去了。。 :mrgreen: :mrgreen:

    • 磊子说:

      是不是哦!呵呵!估计是还没加载完吧!你用什么浏览器看的呢? 不应该有这个问题的! :razz:

  2. yokelai说:

    方法不错!只是有点麻烦,还是用插件容易。

  3. 晕了晕了!这么多蝌蚪,呵呵!

说点什么吧




wireless earbuds moscow mule mugs bluetooth speakers waterproof camera best wireless earbuds best vacuum cleaner best drugstore foundation best dishwasher best waist trainer wireless headphones best vacuum 0594918 best bluetooth earbuds waterproof bluetooth speaker tattoo cover up action camera
订阅本站