yürümeyi öğrendi, sıra koşmaya geldi!
8Haziran2009

Wordpress:Etiketleri Açılan Menüde Gösterme

Bu yazıyı paylaş

BeyazBlog için son etiketlerin bulut halinde gösterimi haricinde bir de tüm etiketlerin gösterilmesi için bir çözüme ihtiyaç duyuyordum. Şöyle biraz araştırınca Wp Hacks‘de çözümü buldum. Açılır bir menü halinde tüm etiketleri yanlarındaki içerik sayısı ile göstermekti çözüm.


Şimdi aşağıdaki kodu temamızın functions.php dosyasına kopyalıyoruz.

<?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 );
}
?>

Daha sonra da aşağıdaki kodu etiket menüsünü göstermek istediğimiz yere ekliyoruz.

<select name="tag-dropdown" onchange="document.location.href=this.options[this.selectedIndex].value;">
	<option value="#">Etiketler</option>
	<?php dropdown_tag_cloud('number=0&order=asc'); ?>
</select>
Bu yazı Hamdi Yaman tarafından yazılmış olup bugün 33, toplamda 5556 kez okunmuştur.
Bu yazıya yorum yapabilirsiniz
yollanıyor, lütfen bekleyiniz..
  • 8.06.2009, 20:00

    Merhaba,
    Siteye gidip baktım da kategori değişince sayfanın terkardan gelmesi pek kullanışlı olmamış, tekrardan sitenin en altına mı inecez :S. Ya AJAX yada yönlenen sitede # çapa yöntemi ile footera inmek lazım. Ama Ajax daha kullanışlı olacaktır.
    Kolay Gelsin…

  • 9.06.2009, 16:11

    ilerleyen günlerde onu sidebar’a alacağım zaten :)

Bu yazı için toplam 2 yorum yapılmıştır..
Facebook ile takip etTwitter ile takip etFlickr ile takip etFrienfeed ile takip et
RSS

Kategoriler

Son Yorumlar

Twitter

Google Friend Connect

Görülesi Siteler

Pcnet Dergisinden Tanıdığımız Cem kardeşimizin bloguCenk Akyıldız'ın bloguYazılarını takip ettiğim Hakan Demiray'ın BloguFatih Hayrioğlu'nun Not DefteriHensterUmut Benzer'in GünlüğüYardımsever, hayırsever şahsiyet Erhan

İstatistikler

h-yaman.com üzerinde 1,348 yazı, 6,525 yorum ve 1,431 farklı yorum yazarı bulunmaktadır.
Bu günlükte yazılan her bir harfte alın terimiz olduğu için izinsiz kopyalanmasını şiddetle kınıyoruz ve bunu yapanların iki cihan saadetinden uzak olmasını, çişini yapamamasını ve manita bulamamasını niyaz ediyoruz. Ayrıca günlüğün hamuru Wordpress ile yoğrulmuştur.