在 WordPress 里 http://localhost/wordpress3.6.1/wp-admin/edit-tags.php?taxonomy=category 这个链接可以显示 WP 里的无限栏目分类,我们来研究一下 WordPress 是如何实现的。
找到 wp-admin/edit-tags.php 这个文件,发现显示栏目的代码很少:
1 |
<form id="posts-filter" action="" method="post"> |
2 |
<input type="hidden" name="taxonomy" value="<?php echo esc_attr($taxonomy); ?>" /> |
3 |
<input type="hidden" name="post_type" value="<?php echo esc_attr($post_type); ?>" /> |
5 |
<?php $wp_list_table->display(); ?> |
其实关键的是 $wp_list_table->display(); 这一行代码。
wordpress 的类库 wp_list_table 自始至终都是用来显示数据,例如用户,插件,评论或是文章,这个类库包含了几乎所有的用于显示、排序、分页和搜索的方法。
我们继续追踪下,打开 wp-admin/includes/class-wp-list-table.php 这个文件,找到 display(); 方法:
08 |
extract( $this->_args ); |
10 |
$this->display_tablenav( 'top' ); |
13 |
<table class="wp-list-table <?php echo implode( ' ', $this->get_table_classes() ); ?>" cellspacing="0"> |
16 |
<?php $this->print_column_headers(); ?> |
22 |
<?php $this->print_column_headers( false ); ?> |
26 |
<tbody id="the-list"<?php if ( $singular ) echo " data-wp-lists='list:$singular'"; ?>> |
27 |
<?php $this->display_rows_or_placeholder(); ?> |
31 |
$this->display_tablenav( 'bottom' ); |
我们再着眼于生成栏目分类的下面这几行代码:
1 |
<tbody id="the-list"<?php if ( $singular ) echo " data-wp-lists='list:$singular'"; ?>> |
2 |
<?php $this->display_rows_or_placeholder(); ?> |
display_rows_or_placeholder() 这个函数又是怎么回事呢?
02 |
* Generate the <tbody> part of the table |
07 |
function display_rows_or_placeholder() { |
08 |
if ( $this->has_items() ) { |
09 |
$this->display_rows(); |
11 |
list( $columns, $hidden ) = $this->get_column_info(); |
12 |
echo '<tr class="no-items"><td class="colspanchange" colspan="' . $this->get_column_count() . '">'; |
接下来是 has_items() 这个函数,这个函数判断有没有数据需要显示:
02 |
* Whether the table has items to display or not |
09 |
function has_items() { |
10 |
return !empty( $this->items ); |
如果有,就 display_rows() :
02 |
* Generate the table rows |
07 |
function display_rows() { |
08 |
foreach ( $this->items as $item ) |
09 |
$this->single_row( $item ); |
13 |
* Generates content for a single row of the table |
18 |
* @param object $item The current item |
20 |
function single_row( $item ) { |
21 |
static $row_class = ''; |
22 |
$row_class = ( $row_class == '' ? ' class="alternate"' : '' ); |
24 |
echo '<tr' . $row_class . '>'; |
25 |
$this->single_row_columns( $item ); |
30 |
* Generates the columns for a single row of the table |
35 |
* @param object $item The current item |
37 |
function single_row_columns( $item ) { |
38 |
list( $columns, $hidden ) = $this->get_column_info(); |
40 |
foreach ( $columns as $column_name => $column_display_name ) { |
41 |
$class = "class='$column_name column-$column_name'"; |
44 |
if ( in_array( $column_name, $hidden ) ) |
45 |
$style = ' style="display:none;"'; |
47 |
$attributes = "$class$style"; |
49 |
if ( 'cb' == $column_name ) { |
50 |
echo '<th scope="row" class="check-column">'; |
51 |
echo $this->column_cb( $item ); |
54 |
elseif ( method_exists( $this, 'column_' . $column_name ) ) { |
55 |
echo "<td $attributes>"; |
56 |
echo call_user_func( array( &$this, 'column_' . $column_name ), $item ); |
60 |
echo "<td $attributes>"; |
61 |
echo $this->column_default( $item, $column_name ); |
也就是说,根据是否有子栏目先拼凑好栏目分类的 html,再通过 $wp_list_table->display(); 显示到前台。
- PHP的无限栏目分类
自己在PHP的无线栏目分类上面就是搞了很久都没有明白,所以现在是趁着记忆力还没有完全的消退的时候速度的记录下来 这里讲解的是最简单的树形栏目,适合的是小中型的栏目分类需求 1.这里讲解的是针对是只要通 ...
- 黄聪:WordPress 后台发布文章时提示用户选择分类
很多用户在后台发布文章,常常会忘记选择分类,所以很有必要添加一个提醒功能,如果没有选择分类,点击发布时,就显示一个提示信息.要实现这个功能,只要将下面的代码添加到主题的 functions.php 即 ...
- destoon7.0后台栏目分类一键获取所有栏目拼音目录
近期研究DT,从DT4.0一直研究到DT7.0,总算也有些心得.最近重新开发设计了一个信息资讯站点:http://www.xuetong365.com/ 废话不多说,上教程 用于DESTOON7.0系 ...
- WordPress后台的文章、分类,媒体,页面,评论,链接等所有信息中显示ID并将ID设置为第一列
WordPress后台默认是不显示文章.分类等信息ID的,查看起来非常不方便,不知道Wp团队出于什么原因默认不显示这个但可以使用Simply Show IDs插件来实现 不使用插件,其他网友的实现: ...
- 黄聪:定制化WordPress后台自定义仪表盘
WordPress作为一博客管理系统,相对来说已经相当简洁了,对用户也十分友好,新手也极易上手. 仪表盘是我们登陆WordPress后看到的后台界面,映入眼帘的是各种各样的信息,如WordPress ...
- WordPress的后台功能菜单介绍与操作,WordPress后台说明
WordPress网站的后台概况和登陆地址 网站都有个后台管理系统,通过网站后台,你可以改变你的网站外观,管理你网站的数据,给网站前台增加页面,文章,视频,图片或者其他功能. 通过WordPress建 ...
- 解决WordPress后台安装主题、插件图片不显示的问题
今天搭建wordpress发现现在主题的时候预览图片都没有了,于是搜索了一下,发现下面的这个方法确实管用,于是转载收藏. 有在WordPress后台安装主题.插件的小伙伴可能会遇到主题.插件图片不显示 ...
- 如何通过数据库修改WordPress后台登录密码
大家是否有过因为忘记WordPress后台登陆密码的时候?其实WordPress后台登陆密码的找回或修改的方法有多种,比如通过邮箱重启密码,又或者通过主机控制面板进入数据库修改等等.本篇教程以GoDd ...
- wordpress后台进去空白怎么办?
最近博客换成了用wordpress程序搭建,内容和版面也重新设计.经常使用FTP工具,更改模板或者其他程序文件.由于对wordpress不太了解,竟然出现了wordpress后台进去空白的问题,而前台 ...
随机推荐
- Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x0000000
启动程序报错: Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x00000006fff80000, 28636 ...
- AES128加密-S盒和逆S盒构造推导及代码实现
文档引用了<密码编码学与网络安全--原理和实践>里边的推导过程,如有不妥,请与我联系修改. 文档<FIPS 197>高级加密标准AES,里边有个S盒构造,涉及到了数论和有限域的 ...
- xshell怎样打印
Xshell提供用本地打印机打印终端窗口文本的功能.在Xshell打印时可以沿用终端窗口使用的字体及颜色.且在页面设置对话框可以设置打印纸的边距. 如何设置打印纸的大小和方向: 1.打开xshell ...
- Android面试收集录 电话、短信和联系人、多媒体技术
1.请写出调用系统拨号界面? Intent intent=new Intent(Intent.ACTION_DIAL,Uri.pase("tel:12345678910")); s ...
- android .9图制作
andorid .9 图,可用于适配各种屏幕.制作的时候,很简单. 在stadio 里面,把鼠标放到图片的边界,点一下.这时候,图片的边缘会有黑块. 然后把鼠标放到黑块上,发现可以拉伸区域了. 这个区 ...
- Error loading MySQLdb module: libmysqlclient.so.18: cannot open shared object file: No such file or directory
在hue上配置Mysql的时候,出现的错误: 发生服务器错误: Error loading MySQLdb module: libmysqlclient.so.18: cannot open sha ...
- 责任链模式的使用-Netty ChannelPipeline和Mina IoFilterChain分析
本文来自网易云社区 作者:乔安然 1. Chain of Responsiblity 定义: 使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系.将这个对象连成一条链,并沿着这条链 ...
- 用起来超爽的Maven——入门篇
你还在为怎样寻找.导入SSH相关依赖包纠结吗? 你还在为没有安装IDE开发工具不能编译.部署.运行项目而纠结吗? 你还在为公司项目目录结构怎样规范而纠结吗? 亲爱的纠结哥,只要你使用了Maven,一切 ...
- 2.Linux文件和目录
1. 目录和路径 linux下比较特殊的目录: . 代表此层目录 .. 代表上一层目录 - 代表前一个工作目录 ~ 代表『目前使用者身份』所在的home目录 ~account 代表 account 这 ...
- java 判断上午/下午
//结果为“0”是上午 结果为“1”是下午 public class GregorianTest { public static void main(String args[]) { Gregoria ...