这个功能是给wordpress建立一个标签(tags)页面,根据字母 A-Z 排序,然后将非字母(比如数字或标点符号)的另外排序,不过可惜的是只支持英文。
实现方法就是用 PHP 判断英文tag的第一个字母,然后做归类排列,代码如下:
<?php /* Template Name: Tag Index */ /* Begin Tag Index */ // Make an array from A to Z. $characters = range('A','Z'); // Retrieve all tags $getTags = get_tags( array( 'order' => 'ASC') ); // Retrieve first letter from tag name $isFirstCharLetter = ctype_alpha(substr($getTags[0]->name, 0, 1)); // Special Character and Number Loop // Run a check to see if the first tag starts with a letter // If it does not, run this if ( $isFirstCharLetter == false ){ // Print a number container $html .= "<div class='tag-group'>"; $html .= "<h3 class='tag-title'>#</h3>"; $html .= "<ul class='tag-list'>"; // Special Character/Number Loop while( $isFirstCharLetter == false ){ // Get the current tag $tag = array_shift($getTags); // Get the current tag link $tag_link = get_tag_link($tag->term_id); // Print List Item $html .= "<li class='tag-item'>"; // Check to see how many tags exist for the current letter then print appropriate code if ( $tag->count > 1 ) { $html .= "<p><a href='{$tag_link}' title='View all {$tag->count} articles with the tag of {$tag->name}' class='{$tag->slug}'>"; } else { $html .= "<p><a href='{$tag_link}' title='View the article tagged {$tag->name}' class='{$tag->slug}'>"; } // Print tag name and count then close the list item $html .= "<span class='tag-name'>{$tag->name}</span></a><span class='tag-count'>#{$tag->count}</span></p>"; $html .= "</li>"; // Retrieve first letter from tag name // Need to redefine the global variable since we are shifting the array $isFirstCharLetter = ctype_alpha(substr($getTags[0]->name, 0, 1)); } // Close the containers $html .= "</ul>"; $html .= "</div>"; } // Letter Loop do { // Get the right letter $currentLetter = array_shift($characters); // Print stuff $html .= "<div class='tag-group'>"; $html .= "<h3 class='tag-title'>{$currentLetter}</h3>"; $html .= "<ul class='tag-list'>"; // While we have tags, run this loop while($getTags){ // Retrieve first letter from tag name $firstChar = substr($getTags[0]->name, 0, 1); // Does the first letter match the current letter? // Check both upper and lowercase characters for true if ( strcasecmp($currentLetter, $firstChar) == 0 ){ // Get the current tag $tag = array_shift($getTags); // Get the current tag link $tag_link = get_tag_link($tag->term_id); // Print stuff $html .= "<li class='tag-item'>"; // Check to see how many tags exist for the current letter then print appropriate code if ( $tag->count > 1 ) { $html .= "<p><a href='{$tag_link}' title='View all {$tag->count} articles with the tag of {$tag->name}' class='{$tag->slug}'>"; } else { $html .= "<p><a href='{$tag_link}' title='View the article tagged {$tag->name}' class='{$tag->slug}'>"; } // Print more stuff $html .= "<span class='tag-name'>{$tag->name}</span></a><span class='tag-count'>#{$tag->count}</span></p>"; $html .= "</li>"; } else { break 1; } } $html .= "</ul>"; $html .= "</div>"; } while ( $characters ); // Will loop over each character in the array // Let's see what we got: echo($html); ?>
不知道中文的怎么搞,如果按照上面的思路,那就是要将中文标签的首字翻译成拼音,然后按照拼音首字母来排列,这么搞不是要新建个表格存储tag的拼音么?搞不定,有高手帮忙解决么?
以上英文的方法转自老外博客:stacigh.com/2013/11/creating-a-wordpress-tag-index-page/
THE END
搜来搜去竟然搜到了这篇文章……
老早以前发的 现在也不知道能不能用了,关键是里面很多转译的符号,看着都心累。
有一篇关于中文标签的分类代码。但是有bug,找了半天也没找到解决办法。
什么bug?
对于中文标签的怎么解决
http://www.ueffort.com/mysql-pin-yin-shou-zi-mu-cha-xun-chao-gao-xing-neng/
可以参考我这篇文章
如果支持中文,也是个不错的东东
代码好长...
可惜中文的不会、
来瞧瞧,学习一下