Die Tags in einem Dropdown Menu darstellen

Manche mögen Tag Clouds, manche hassen sie regelrecht. Auf jeden Fall nehmen die Wortwolken viel Platz in der Sidebar ein.

Wenn man einer Tag Cloud im WordPress Blog nicht zu viel Platz einräumen möchte, aber trotzdem Tags als alternative Navigation anbieten möchte, kann man die Tags statt in einer Wolke, alternativ in einem Drop Down Menue anzeigen lassen.

Dazu einfach den folgen Code in die functions.php des aktuellen WordPress Themes einbinden.

Wer den zweiten Code, der das Dropdown Menue ausgibt nicht direkt in die Templates einbauen möchte, kann das stattdessen über ein Plugin, welches Code erlaubt erledigen.

Das Plugin Advanced Text Widget ist hervorragend dazu geeignet und bietet nebenbei eine Menge Optionen gegenüber den mitgelieferten Text Widgets. Das Plugin arbeitet ohne Fehler mit WordPress 3.0.3. zusammen.

<?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 		$spread = 1;
	$font_spread = $largest - $smallest;
	if ( $font_spread 		$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
$tag ($count)
";
	}
	switch ( $format ) :
	case 'array' :
		$return =& $a;
		break;
	case 'list' :
$return = "
<ul class="wp-tag-cloud">
<ul class="wp-tag-cloud">\n\t
	<li>";
 $return .= join("</li>
</ul>
</ul>
&nbsp;
<ul class="wp-tag-cloud">
<ul class="wp-tag-cloud">\n\t
	<li>", $a);
 $return .= "</li>
</ul>
</ul>
&nbsp;
<ul class="wp-tag-cloud">\n</ul>
\n";
break;
default :
$return = join("\n", $a);
break;
endswitch;
return apply_filters( 'dropdown_generate_tag_cloud', $return, $tags, $args );
}
?>


Als nächstes fügt man den folgenden Code an der Stelle wo das Dropdown Menue erscheinen soll einbinden:

<select name="&quot;tag-dropdown&quot;" onchange="&quot;document.location.href=this.options[this.selectedIndex].value;&quot;"> <option value="&quot;#&quot;">Tag Liste</option> </select>


Quelle

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

*

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>