首页 建站技巧 制作一个首字母排序的标签页...

制作一个首字母排序的标签页面

作者:

修改日期:

通过代码实现所有站内标签按照26个字母进行分类排序,提供用户体验,具体效果如下图:

2014-10-08_114233

具体制作方法如下:
1、functions.php函数文件中添加以下代码:

  1. /**
  2. * 根据标题首字母制作标签页面
  3. * Author:Specs
  4. * Blog:http://9iphp.com/
  5. */
  6. /**
  7. * 9IPHP <Get post title first letter> in the theme.
  8. * 拼音首字母
  9. */
  10. function specs_getfirstchar($s0){
  11. $fchar = ord($s0{0});
  12. if($fchar >= ord(“A”and $fchar <= ord(“z”) )return strtoupper($s0{0});
  13. $s1 = iconv(“UTF-8”,“gb2312”$s0);
  14. $s2 = iconv(“gb2312”,“UTF-8”$s1);
  15. if($s2 == $s0){$s = $s1;}else{$s = $s0;}
  16. $asc = ord($s{0}) * 256 + ord($s{1}) – 65536;
  17. if($asc >= -20319 and $asc <= -20284) return “A”;
  18. if($asc >= -20283 and $asc <= -19776) return “B”;
  19. if($asc >= -19775 and $asc <= -19219) return “C”;
  20. if($asc >= -19218 and $asc <= -18711) return “D”;
  21. if($asc >= -18710 and $asc <= -18527) return “E”;
  22. if($asc >= -18526 and $asc <= -18240) return “F”;
  23. if($asc >= -18239 and $asc <= -17923) return “G”;
  24. if($asc >= -17922 and $asc <= -17418) return “H”;
  25. if($asc >= -17417 and $asc <= -16475) return “J”;
  26. if($asc >= -16474 and $asc <= -16213) return “K”;
  27. if($asc >= -16212 and $asc <= -15641) return “L”;
  28. if($asc >= -15640 and $asc <= -15166) return “M”;
  29. if($asc >= -15165 and $asc <= -14923) return “N”;
  30. if($asc >= -14922 and $asc <= -14915) return “O”;
  31. if($asc >= -14914 and $asc <= -14631) return “P”;
  32. if($asc >= -14630 and $asc <= -14150) return “Q”;
  33. if($asc >= -14149 and $asc <= -14091) return “R”;
  34. if($asc >= -14090 and $asc <= -13319) return “S”;
  35. if($asc >= -13318 and $asc <= -12839) return “T”;
  36. if($asc >= -12838 and $asc <= -12557) return “W”;
  37. if($asc >= -12556 and $asc <= -11848) return “X”;
  38. if($asc >= -11847 and $asc <= -11056) return “Y”;
  39. if($asc >= -11055 and $asc <= -10247) return “Z”;
  40. return null;
  41. }
  42. function specs_pinyin($zh){
  43. $ret = “”;
  44.     $s1 = iconv(“UTF-8”,“gb2312”$zh);
  45.     $s2 = iconv(“gb2312”,“UTF-8”$s1);
  46.     if($s2 == $zh){$zh = $s1;}
  47.     $s1 = substr($zh,$i,1);
  48.     $p = ord($s1);
  49.     if($p > 160){
  50.         $s2 = substr($zh,$i++,2);
  51.         $ret .= specs_getfirstchar($s2);
  52.     }else{
  53.         $ret .= $s1;
  54.     }
  55. return strtoupper($ret);
  56. }
  57. /**
  58. * 9IPHP <Get all tags> in the theme.
  59. * 标签页面
  60. */
  61. function specs_show_tags() {
  62. if(!$output = get_option(‘specs_tags_list’)){
  63. $categories = get_terms( ‘post_tag’, array(
  64. ‘orderby’    => ‘count‘,
  65. ‘hide_empty’ => 1
  66. ) );
  67. foreach($categories as $v){
  68. for($i = 65; $i <= 90; $i++){
  69. if(specs_pinyin($v->name) == chr($i)){
  70. $r[chr($i)][] = $v;
  71. }
  72. }
  73. for($i=48;$i<=57;$i++){
  74. if(specs_pinyin($v->name) == chr($i)){
  75. $r[chr($i)][] = $v;
  76. }
  77. }
  78. }
  79. ksort($r);
  80. $output = “<ul class=’list-inline’ id=’tag_letter’>”;
  81. for($i=65;$i<=90;$i++){
  82. $tagi = $r[chr($i)];
  83. if(is_array($tagi)){
  84. $output .= “<li><a href=’#”.chr($i).“‘>”.chr($i).“</a></li>”;
  85. }else{
  86. $output .= “<li>”.chr($i).“</li>”;
  87. }
  88. }
  89. for($i=48;$i<=57;$i++){
  90. $tagi = $r[chr($i)];
  91. if(is_array($tagi)){
  92. $output .= “<li><a href=’#”.chr($i).“‘>”.chr($i).“</a></li>”;
  93. }else{
  94. $output .= “<li>”.chr($i).“</li>”;
  95. }
  96. }
  97. $output .= “</ul>”;
  98. $output .= “<ul id=’all_tags’ class=’list-unstyled’>”;
  99. for($i=65;$i<=90;$i++){
  100. $tagi = $r[chr($i)];
  101. if(is_array($tagi)){
  102. $output .= “<li id='”.chr($i).“‘><h4 class=’tag_name’>”.chr($i).“</h4>”;
  103. foreach($tagi as $tag){
  104. $output .= “<a href='”.get_tag_link($tag->term_id).“‘>”.$tag->name.“(“.$tag->count.“)</a>”;
  105. }
  106. }
  107. }
  108. for($i=48;$i<=57;$i++){
  109. $tagi = $r[chr($i)];
  110. if(is_array($tagi)){
  111. $output .= “<li id='”.chr($i).“‘><h4 class=’tag_name’>”.chr($i).“</h4>”;
  112. foreach($tagi as $tag){
  113. $output .= “<a href='”.get_tag_link($tag->term_id).“‘>”.$tag->name.“(“.$tag->count.“)</a>”;
  114. }
  115. }
  116. }
  117. $output .= “</ul>”;
  118. update_option(‘specs_tags_list’, $output);
  119. }
  120.     echo $output;
  121. }
  122. function clear_tags_cache() {
  123.     update_option(‘specs_tags_list’, ); // 清空 specs_archives_list
  124. }
  125. add_action(‘save_post’, ‘clear_tags_cache’); // 新发表文章/修改文章时
  126. /**
  127. * 9IPHP <Get post count by tag term_id> in the theme.
  128. * 根据标签ID活动标签文章数
  129. */
  130. function specs_post_count_by_tag ( $arg ,$type = ‘include‘){
  131.     $args=array(
  132.         $type => $arg,
  133.     );
  134.     $tags = get_tags($args);
  135.     if ($tags) {
  136.         foreach ($tags as $tag) {
  137.             return $tag->count;
  138.         }
  139.     }
  140. }

2、复制模板中的page.php页面文件,然后修改名称如修改为 page-tag.php文件,然后把其中的内容调用代码:
<?php the_content(); ?>
修改为:
<?php specs_show_tags(); ?>。
3、把 Template Name名字替换为“标签页面”,然后在后台新建一个页面,模板选择“标签页面”,保存即可。

文章转载至:9iphp