Etiketlerinizi Açılır Kutu içinde Gösterin!

Benim bir zamanlar takıntım vardı. Sitenin “sağı, solu, yazısı cartı curtu aynı hizada olacak” diye. Çok şükür bu dertten kurtuldum, çünkü bunu sağlamak için oturup CSS düzenlemekten yoruldum :D Ama ufak ta olsa arada nüksettiği oluyor tabii. Özellikle uğraşmak istemediğim şu etiketlerin olduğu alanı “justify” (iki yana yaslı) olarak ayarlama olayı. Gerçi böyle renkli renkli cicili bicili bi şekilde olması iyi. Kalsın cici etiketlerim. Google amcanız sizi seviyor tabii :)

Gelelim şu başlıkta bahsettiğim meseleye. Etiketleriniz benim gibi takıntılıysanız ya sayfa olarak görünür yada yan tarafta itinayla düzenlenmiş olarak :) Ben diyorum i bir açılır kutuda olsun. Nasıl mı? Anlatayım…

Öncelikle düzenleyeceğiniz dosyalar: functions.php (wp-includes/ klasöründe kendileri) ve muhtemel sidebar.php (temanız içinde bu güzel hanfendi)

Öncelikle bu düzenleme yapacağınız dosyaların bir güzel yedeğini alın. Sonra “vay Serkan ben yanlış yaptım ama bunun sorumlusu sensin” demeyin bana. Ben uyarıyorum :)

Kodlar

Öncelikle functions.php dosyasını açın.

?>

kodunu bulun altına aşağıdaki kodu aynen yapıştırın.



<?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')) ); // Her zaman yüksek hitli olanlar üstte

if ( empty($tags) )
return;

$return = dropdown_generate_tag_cloud( $tags, $args ); //  $args a göre derlenmiş en yüksek hitli etiketler
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 bazen işe yaramaz; bu potensiyel olarak alt bilginin tekrar derlenmiş hali olacak.
if ( 'name' == $orderby )
uksort($counts, 'strnatcasecmp');
else
asort($counts);

if ( 'DESC' == $order )
$counts = array_reverse( $counts, true );

$a = array();

$rel = ( is_object($wp_rewrite) &amp;&amp; $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(' ', '&amp;nbsp;', wp_specialchars( $tag ));
$a[] = "t<option value='$tag_link'>$tag ($count)</option>";
}

switch ( $format ) :
case 'array' :
$return =&amp; $a;
break;
case 'list' :
$return = "<ul class='wp-tag-cloud'>nt<li>";
$return .= join("</li>nt<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 );
}
?>

Bu dosyayı kaydedin ve suncunuza yollayın.

Şimdi geldik en cafcaflı bölüme :) . Burada yapacağınız şeye dikkat edin. Aşağıdaki kodu sidebar.php içine yapıştırın. Bileşen olarak eklediğinizde bazen içeriği okuyamıyor. (WordPress bileşenlerinden “Metin” bileşenini kullanırsanız bu hata oluyor)

<select name="tag-dropdown" onchange="document.location.href=this.options[this.selectedIndex].value;">
<option value="#">Etiket Listesi</option>
<?php dropdown_tag_cloud('number=0&amp;order=asc'); ?>
</select> 

Tabi bide bunu başlık etiketlerinin arasına koyduğunuzda daha güzel olacaktır.

<h3>Etiketlerim</h3>

<ul>

<select name="tag-dropdown" onchange="document.location.href=this.options[this.selectedIndex].value;">
<option value="#">Etiket Listesi</option>
<?php dropdown_tag_cloud('number=0&amp;order=asc'); ?>
</select>

</ul>

Hadi hayırlı olsun.