用下拉菜单显示WordPress的Tags

搞Wordpress,除了主题就是各种各样的插件,尤其是非常具有实用价值而不是华而不实的那些。今天再次全文转载一篇城市@后的“用下拉菜单显示你的WordPress Tags”。

标签(Tags)对于任何一个博客来说都是非常重要的:正如你所知道的那样,它允许用户显示一个主题下所有相关日志的列表。在多数情况下标签(Tags)是可以用一个标签云(Tags Cloud)来显示的。

如果你有20个不同的标签,标签云不失为一种很好的选择,但是如果你有100个或是更多数量的标签,那么你的标签云就会很杂乱、很难阅读!也更没有谁会去点击你的标签云!这也许是为什么近来许多博客都撤掉了原有的标签云功能,或者是建立一个单独的页面来放置这些数量庞大的标签。

那么是不是标签数量很大时我们就无法完美地将其在首页显示呢?我们的解决办法就是——用下拉菜单来显示标签

首先,我们必须创造一个php函数(a php function)。在你的主题文件夹中找到functions.php这个文件,在其中添加如下代码(小心PHP的开放/关闭标记!):

<?php
function dropdown_tag_cloud( $args = '' ) {
	$defaults = array(
		'smallest' => 8, 'largest' => 22, 'unit' => 'pt', 'number' => 45,
		'format' => 'flat', 'orderby' => 'name', 'order' => 'ASC',
		'exclude' => '', 'include' => ''
	);
	$args = wp_parse_args( $args, $defaults );
 
	$tags = get_tags( array_merge($args, array('orderby' => 'count', 'order' => 'DESC')) ); // Always query top tags
 
	if ( empty($tags) )
		return;
 
	$return = dropdown_generate_tag_cloud( $tags, $args ); // Here's where those top tags get sorted according to $args
	if ( is_wp_error( $return ) )
		return false;
	else
		echo apply_filters( 'dropdown_tag_cloud', $return, $args );
}
 
function dropdown_generate_tag_cloud( $tags, $args = '' ) {
	global $wp_rewrite;
	$defaults = array(
		'smallest' => 8, 'largest' => 22, 'unit' => 'pt', 'number' => 45,
		'format' => 'flat', 'orderby' => 'name', 'order' => 'ASC'
	);
	$args = wp_parse_args( $args, $defaults );
	extract($args);
 
	if ( !$tags )
		return;
	$counts = $tag_links = array();
	foreach ( (array) $tags as $tag ) {
		$counts[$tag->name] = $tag->count;
		$tag_links[$tag->name] = get_tag_link( $tag->term_id );
		if ( is_wp_error( $tag_links[$tag->name] ) )
			return $tag_links[$tag->name];
		$tag_ids[$tag->name] = $tag->term_id;
	}
 
	$min_count = min($counts);
	$spread = max($counts) - $min_count;
	if ( $spread <= 0 )
		$spread = 1;
	$font_spread = $largest - $smallest;
	if ( $font_spread <= 0 )
		$font_spread = 1;
	$font_step = $font_spread / $spread;
 
	// SQL cannot save you; this is a second (potentially different) sort on a subset of data.
	if ( 'name' == $orderby )
		uksort($counts, 'strnatcasecmp');
	else
		asort($counts);
 
	if ( 'DESC' == $order )
		$counts = array_reverse( $counts, true );
 
	$a = array();
 
	$rel = ( is_object($wp_rewrite) && $wp_rewrite->using_permalinks() ) ? ' rel="tag"' : '';
 
	foreach ( $counts as $tag => $count ) {
		$tag_id = $tag_ids[$tag];
		$tag_link = clean_url($tag_links[$tag]);
		$tag = str_replace(' ', '&nbsp;', wp_specialchars( $tag ));
		$a[] = "\t<option value='$tag_link'>$tag ($count)</option>";
	}
 
	switch ( $format ) :
	case 'array' :
		$return =& $a;
		break;
	case 'list' :
		$return = "<ul class='wp-tag-cloud'>\n\t<li>";
		$return .= join("</li>\n\t<li>", $a);
		$return .= "</li>\n</ul>\n";
		break;
	default :
		$return = join("\n", $a);
		break;
	endswitch;
 
	return apply_filters( 'dropdown_generate_tag_cloud', $return, $tags, $args );
}
?>

一旦你创建成功了这个函数,你就可以在你主题的任何地方调用它,并显示你想要的标签列表。大多数情况下我们都把它放在侧边(sidebar.php)栏里。

<select name="tag-dropdown" onchange="document.location.href=this.options[this.selectedIndex].value;">
	<option value="#">List Tags</option>
	<?php dropdown_tag_cloud('number=0&order=asc'); ?>
</select>
2008-10-24 @ 20:41:10 | 分类: Wordpress | 标签: , , | 阅读: 11,299 次 | 评论: 1

相关文章阅读

本文仅有 1 位高人指点~~

.

(必填)
(必填,但绝不会公开)