WordPress制作一个首字母排序的标签页面
很早就想制作这样一个页面了,废话不多说, 先看看效果:传送门
在网上找了很多的代码,试了很久,修改了一些代码,最终就达到了现在的效果。
实现方法:(里面增加了缓存功能,打开页面更快,对数据进行了缓存,不用每次打开页面都查询所有标签然后按首字母分类。)
1.在functions.php函数文件中添加以下代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
|
/** * 根据标题首字母制作标签页面 */ /** * 拼音首字母 */ function specs_getfirstchar( $s0 ){ $fchar = ord( $s0 {0}); if ( $fchar >= ord( "A" ) and $fchar <= ord( "z" ) ) return strtoupper ( $s0 {0}); $s1 = iconv( "UTF-8" , "gb2312" , $s0 ); $s2 = iconv( "gb2312" , "UTF-8" , $s1 ); if ( $s2 == $s0 ){ $s = $s1 ;} else { $s = $s0 ;} $asc = ord( $s {0}) * 256 + ord( $s {1}) - 65536; if ( $asc >= -20319 and $asc <= -20284) return "A" ; if ( $asc >= -20283 and $asc <= -19776) return "B" ; if ( $asc >= -19775 and $asc <= -19219) return "C" ; if ( $asc >= -19218 and $asc <= -18711) return "D" ; if ( $asc >= -18710 and $asc <= -18527) return "E" ; if ( $asc >= -18526 and $asc <= -18240) return "F" ; if ( $asc >= -18239 and $asc <= -17923) return "G" ; if ( $asc >= -17922 and $asc <= -17418) return "H" ; if ( $asc >= -17417 and $asc <= -16475) return "J" ; if ( $asc >= -16474 and $asc <= -16213) return "K" ; if ( $asc >= -16212 and $asc <= -15641) return "L" ; if ( $asc >= -15640 and $asc <= -15166) return "M" ; if ( $asc >= -15165 and $asc <= -14923) return "N" ; if ( $asc >= -14922 and $asc <= -14915) return "O" ; if ( $asc >= -14914 and $asc <= -14631) return "P" ; if ( $asc >= -14630 and $asc <= -14150) return "Q" ; if ( $asc >= -14149 and $asc <= -14091) return "R" ; if ( $asc >= -14090 and $asc <= -13319) return "S" ; if ( $asc >= -13318 and $asc <= -12839) return "T" ; if ( $asc >= -12838 and $asc <= -12557) return "W" ; if ( $asc >= -12556 and $asc <= -11848) return "X" ; if ( $asc >= -11847 and $asc <= -11056) return "Y" ; if ( $asc >= -11055 and $asc <= -10247) return "Z" ; return null; } function specs_pinyin( $zh ){ $ret = "" ; $s1 = iconv( "UTF-8" , "gb2312" , $zh ); $s2 = iconv( "gb2312" , "UTF-8" , $s1 ); if ( $s2 == $zh ){ $zh = $s1 ;} $s1 = substr ( $zh , $i ,1); $p = ord( $s1 ); if ( $p > 160){ $s2 = substr ( $zh , $i ++,2); $ret .= specs_getfirstchar( $s2 ); } else { $ret .= $s1 ; } return strtoupper ( $ret ); } /** * 标签页面 */ function specs_show_tags() { if (! $output = get_option( 'specs_tags_list' )){ $categories = get_terms( 'post_tag' , array ( 'orderby' => 'count' , 'hide_empty' => 1 ) ); foreach ( $categories as $v ){ for ( $i = 65; $i <= 90; $i ++){ if (specs_pinyin( $v ->name) == chr ( $i )){ $r [ chr ( $i )][] = $v ; } } for ( $i =48; $i <=57; $i ++){ if (specs_pinyin( $v ->name) == chr ( $i )){ $r [ chr ( $i )][] = $v ; } } } ksort( $r ); $output = "<ul class='list-inline' id='tag_letter'>" ; for ( $i =65; $i <=90; $i ++){ $tagi = $r [ chr ( $i )]; if ( is_array ( $tagi )){ $output .= "<li><a href='#" . chr ( $i ). "'>" . chr ( $i ). "</a></li>" ; } else { $output .= "<li>" . chr ( $i ). "</li>" ; } } for ( $i =48; $i <=57; $i ++){ $tagi = $r [ chr ( $i )]; if ( is_array ( $tagi )){ $output .= "<li><a href='#" . chr ( $i ). "'>" . chr ( $i ). "</a></li>" ; } else { $output .= "<li>" . chr ( $i ). "</li>" ; } } $output .= "</ul>" ; $output .= "<ul id='all_tags' class='list-unstyled'>" ; for ( $i =65; $i <=90; $i ++){ $tagi = $r [ chr ( $i )]; if ( is_array ( $tagi )){ $output .= "<li id='" . chr ( $i ). "'><h4 class='tag_name'>" . chr ( $i ). "</h4>" ; foreach ( $tagi as $tag ){ $output .= "<a href='" .get_tag_link( $tag ->term_id). "'>" . $tag ->name. "(" . $tag -> count . ")</a>" ; } } } for ( $i =48; $i <=57; $i ++){ $tagi = $r [ chr ( $i )]; if ( is_array ( $tagi )){ $output .= "<li id='" . chr ( $i ). "'><h4 class='tag_name'>" . chr ( $i ). "</h4>" ; foreach ( $tagi as $tag ){ $output .= "<a href='" .get_tag_link( $tag ->term_id). "'>" . $tag ->name. "(" . $tag -> count . ")</a>" ; } } } $output .= "</ul>" ; update_option( 'specs_tags_list' , $output ); } echo $output ; } function clear_tags_cache() { update_option( 'specs_tags_list' , '' ); // 清空 specs_archives_list } add_action( 'save_post' , 'clear_tags_cache' ); // 新发表文章/修改文章时 /** * 根据标签ID活动标签文章数 */ function specs_post_count_by_tag ( $arg , $type = 'include' ){ $args = array ( $type => $arg , ); $tags = get_tags( $args ); if ( $tags ) { foreach ( $tags as $tag ) { return $tag -> count ; } } } |
2.复制一份page.php,然后更名为page-tag.php,然后上传到cpanel面板和page.php相同的路径下面
3.在page-tag.php中最上面添加下面代码:
1
2
3
4
5
|
<?php /* Template Name: Tags */ ?> |
4.把page-tag.php页面中的下面代码
1
|
<?php the_content(); ?> |
修改为:
1
|
<?php specs_show_tags(); ?> |
5.在style.css中加入下面的代码,我根据网上的代码修改了很多,比如开始的时候有li标签的小方块,之后我自己去掉了,又比如开始的时候宽度和我的主题不适合,之后我使用审查元素自己找到问题然后修改了,最后就有了下面的CSS代码:
1
2
3
4
5
6
7
8
9
10
11
12
|
.tag_name{ width:1034px; float:left; line-height:30px; margin:25px 0 0 26px; font-size:14px; color:#000;line-height: 200%;} .tag_name_a{ width:1034px; float:left; border:2px solid #d8d9d9;} .tag_name_b{ width:680px; float:left; line-height:30px; margin:25px 0 0 26px; font-size:14px; color:#000;} .tag_name_c{ width:980px; height:45px; float:left; border-bottom:1px solid #d8d9d9; margin:25px 0 0 26px; font-size:20px; color:#000;} .list-unstyled{ width:1034px !important; float:left; line-height:30px; margin:25px 0 0 26px; font-size:14px; color:#000;line-height: 200%;margin: 2px;} .list-unstyled li{width: 1000px !important;float: left;margin: 0 5px 0 0;padding: 5px;list-style-type:none !important;} .list-unstyled a{color: #333333; padding: 5px 8px;} .list-inline {width:850px;list-style: none;height:100px; text-align:center; overflow:hidden; padding-top:0em;} .list-inline li{float: left;list-style-type:none !important;display: block;text-decoration: none;background: none repeat scroll 0 0 #333333; border: 5px solid #333333; color: #f7f8f8; margin: 1px; padding: 3px 8px;} .list-inline a{color: #f7f8f8;} .list-inline a:hover,.ist-inlin a.current {text-decoration: underline;background: none repeat scroll 0 0 #da5a04; border: 4px solid #da5a04; color: #f7f8f8; font-weight: bolder;} |
上面的这些CSS代码可能不适合你的主题,有任何问题请评论留言。我会尽快回复。
6.新建一个页面,名字就写“标签”,内容不写,右边的“模板”选择Tags,然后保存即可,最后可以像我一样在菜单中添加标签页的链接就可以了哦!
参考网址:
1.http://blog.0660hf.com/261.html
2.http://9iphp.com/opensystem/wordpress/895.html
WordPress制作一个首字母排序的标签页面的更多相关文章
- 联系人的侧边字母索引ListView 将手机通讯录姓名通过首字母排序。
package com.lixu.letterlistview; import java.util.ArrayList; import java.util.List; import org.apa ...
- 获取手机通讯录放入PinnedSectionListView中,按名字首字母排序,并且实现拨打电话功能。
package com.lixu.tongxunlu; import java.util.ArrayList; import com.lixu.tongxunlu.PinnedSectionListV ...
- 对JSON格式的城市按照拼音首字母排序
需求说明: App应用中最常见的一种操作就是对城市按照拼音首字母排序,以方便选择城市.而已有的json格式的城市数据是没有这种排序的. 已有的json格式的城市数据格式如下[简化之后]: 数据格式说明 ...
- Oracle 10g如何对用户姓名,按首字母排序、查询
首先介绍Oracle 9i新增加的一个系统自带的排序函数 1.按首字母排序 在oracle9i中新增了按照拼音.部首.笔画排序功能.设置NLS_SORT值 SCHINESE_RADICA ...
- [转]Oracle 10g如何对用户姓名,按首字母排序、查询
首先介绍Oracle 9i新增加的一个系统自带的排序函数 1.按首字母排序 在oracle9i中新增了按照拼音.部首.笔画排序功能.设置NLS_SORT值 SCHINESE_RADICA ...
- 三道习题(1、将单词表中由相同字母组成的单词归成一类,每类单词按照单词的首字母排序,并按 #每类中第一个单词字典序由大到小排列输出各个类别。 #输入格式:按字典序由小到大输入若干个单词,每个单词占一行,以end结束输入。)
#coding=gbk ''' 1.将单词表中由相同字母组成的单词归成一类,每类单词按照单词的首字母排序,并按 #每类中第一个单词字典序由大到小排列输出各个类别. #输入格式:按字典序由小到大输入若干 ...
- localeCompare按首字母排序汉字
sort() 方法用于对数组的元素进行排序. 如果想按照其他标准进行排序,就需要提供比较函数,该函数要比较两个值,然后返回一个用于说明这两个值的相对顺序的数字.比较函数应该具有两个参数 a 和 b,其 ...
- Java中实现对集合中对象按中文首字母排序
有一个person对象如下: public class Person { private String id;private String nam; } 一个list集合如下: List<Emp ...
- HashMap加入数据后,会自动根据首字母排序
1.Map<String, ArrayList<XX>> entityHashMap = new HashMap<>(); 然后增加一些数据,会发现根据String ...
随机推荐
- 用VSCode开发一个基于asp.net core 2.0/sql server linux(docker)/ng5/bs4的项目(1)
最近使用vscode比较多. 学习了一下如何在mac上使用vscode开发asp.netcore项目. 这里是我写的关于vscode的一篇文章: https://www.cnblogs.com/cgz ...
- Java架构工程师知识图,你都知道么?
1.工程化专题 (团队大于3个人之后,你需要去考虑团队合作,科学管理) 2.源码分析专题 (好的程序员,一行代码一个设计就能看出来,源码分析带你品味代码,感受架构) 大家可以点击加入群:69757 ...
- CodeForces-749A
要求组成n的素数最多,根据n的奇偶讨论:如果n是偶数,直接打印n/2个数字'2'就可以了:如果n是基数,则先打印一个'3',再打印(n-3)/2个数字'2'就可以了. AC代码: #include&l ...
- 3D打印技术在医疗上的实际应用与实验室研究
2018-01-17 Chris 免费3D打印模型资源站 预计阅读时间:5-10分钟 关键字:3D打印髋关节.脊柱置换产品,3D打印技术辅助精准截骨,义齿,生物墨水(BioInk),干细胞 随着& ...
- 终于,我也要出一本C#的书了 - 我的写作历程与C#书单推荐
我之前的面试题停了很久,是因为 - 我写书去了. 前言 我于2012年3月开始工作,到现在马上就满六年了.这六年里,我从一个连Sql server是什么都不知道,只会写最简单的c#的程序员开始做起,一 ...
- 使用static与const关键字时需要掌握的知识
static:1.不考虑类,static的作用: 1)第一个作用:隐藏.使得全局变量和函数对其它文件不可见,同时避免了不同文件的命名冲突. 2)第二个作用:默认初始化为0.未初始化的全局静 ...
- 搜索引擎的缓存(cache)机制
什么是缓存? 在搜索领域中,所谓缓存,就是在高速内存硬件设备上为搜索引擎开辟一块存储区,来存储常见的用户查询及其结果,并采用一定的管理策略来维护缓存区内的数据.当搜索引擎再次接收到用户的查询请求时,首 ...
- Python模拟登录成功与失败处理方式(不涉及前端)
任务说明: (1) 用户输入用户名,如不存在此用户不能登录: (2) 用户在输入密码时,如果连续输入三次错误,则该用户被锁定一段时间; (3) 用户被锁定一段时间后,可再次进行尝试登录: 程序使用库: ...
- 裁剪Ubuntu内核和模块管理2
准备工作 通常要运行的第一个命令是: #cd /usr/src/linux;make mrproper 该命令确保源代码目录下没有不正确的.o文件以及文件的互相依赖.由于我们使用刚下载的完整的源程序包 ...
- TI Davinci DM6446开发攻略——根文件系统的裁剪和移植
一.补充文件系统知识 Linux根文件系统是存放tool软件.lib文件.script(脚本).配置文件.其他特殊文件.自己开发的应用程序的地方.嵌入式linux的根文件系统rootfs就像windo ...