WordPress后台edit-tags.php里无限栏目分类实现

在 WordPress 里 http://localhost/wordpress3.6.1/wp-admin/edit-tags.php?taxonomy=category 这个链接可以显示 WP 里的无限栏目分类,我们来研究一下 WordPress 是如何实现的。

找到 wp-admin/edit-tags.php 这个文件,发现显示栏目的代码很少:

view source

print?

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); ?>" />
4  
5 <?php $wp_list_table->display(); ?>
6  
7 <br class="clear" />
8 </form>

其实关键的是 $wp_list_table->display(); 这一行代码。金殿娱乐城

wordpress 的类库 wp_list_table 自始至终都是用来显示数据,例如用户,插件,评论或是文章,这个类库包含了几乎所有的用于显示、排序、分页和搜索的方法。

我们继续追踪下,打开 wp-admin/includes/class-wp-list-table.php 这个文件,找到 display(); 方法:

view source

print?

01     /**
02      * Display the table
03      *
04      * @since 3.1.0
05      * @access public
06      */
07     function display() {
08         extract( $this->_args );
09  
10         $this->display_tablenav( ‘top‘ );
11  
12 ?>
13 <table class="wp-list-table <?php echo implode( ‘ ‘, $this->get_table_classes() ); ?>" cellspacing="0">
14     <thead>
15     <tr>
16         <?php $this->print_column_headers(); ?>
17     </tr>
18     </thead>
19  
20     <tfoot>
21     <tr>
22         <?php $this->print_column_headers( false ); ?>
23     </tr>
24     </tfoot>
25  
26     <tbody id="the-list"<?php if ( $singular ) echo " data-wp-lists=‘list:$singular‘"; ?>>
27         <?php $this->display_rows_or_placeholder(); ?>
28     </tbody>
29 </table>
30 <?php
31         $this->display_tablenav( ‘bottom‘ );
32     }

我们再着眼于生成栏目分类的下面这几行代码:

view source

print?

1 <tbody id="the-list"<?php if ( $singular ) echo " data-wp-lists=‘list:$singular‘"; ?>>
2     <?php $this->display_rows_or_placeholder(); ?>
3 </tbody>

display_rows_or_placeholder() 这个函数又是怎么回事呢?

view source

print?

01 /**
02 * Generate the <tbody> part of the table
03 *
04 * @since 3.1.0
05 * @access protected
06 */
07 function display_rows_or_placeholder() {
08     if ( $this->has_items() ) {
09         $this->display_rows();
10     } else {
11         list( $columns, $hidden ) = $this->get_column_info();
12         echo ‘<tr class="no-items"><td class="colspanchange" colspan="‘ . $this->get_column_count() . ‘">‘;
13         $this->no_items();
14         echo ‘</td></tr>‘;
15     }
16 }

接下来是 has_items() 这个函数,这个函数判断有没有数据需要显示:

view source

print?

01 /**
02 * Whether the table has items to display or not
03 *
04 * @since 3.1.0
05 * @access public
06 *
07 * @return bool
08 */
09 function has_items() {
10     return !empty( $this->items );
11 }

如果有,就 display_rows() :

view source

print?

01 /**
02 * Generate the table rows
03 *
04 * @since 3.1.0
05 * @access protected
06 */
07 function display_rows() {
08     foreach ( $this->items as $item )
09         $this->single_row( $item );
10 }
11  
12 /**
13 * Generates content for a single row of the table
14 *
15 * @since 3.1.0
16 * @access protected
17 *
18 * @param object $item The current item
19 */
20 function single_row( $item ) {
21     static $row_class = ‘‘;
22     $row_class = ( $row_class == ‘‘ ? ‘ class="alternate"‘ : ‘‘ );
23  
24     echo ‘<tr‘ . $row_class . ‘>‘;
25     $this->single_row_columns( $item );
26     echo ‘</tr>‘;
27 }
28  
29 /**
30 * Generates the columns for a single row of the table
31 *
32 * @since 3.1.0
33 * @access protected
34 *
35 * @param object $item The current item
36 */
37 function single_row_columns( $item ) {
38     list( $columns, $hidden ) = $this->get_column_info();
39  
40     foreach ( $columns as $column_name => $column_display_name ) {
41         $class = "class=‘$column_name column-$column_name‘";
42  
43         $style = ‘‘;
44         if ( in_array( $column_name, $hidden ) )
45             $style = ‘ style="display:none;"‘;
46  
47         $attributes = "$class$style";
48  
49         if ( ‘cb‘ == $column_name ) {
50             echo ‘<th scope="row" class="check-column">‘;
51             echo $this->column_cb( $item );
52             echo ‘</th>‘;
53         }
54         elseif ( method_exists( $this, ‘column_‘ . $column_name ) ) {
55             echo "<td $attributes>";
56             echo call_user_func( array( &$this, ‘column_‘ . $column_name ), $item );
57             echo "</td>";
58         }
59         else {
60             echo "<td $attributes>";
61             echo $this->column_default( $item, $column_name );
62             echo "</td>";
63         }
64     }
65 }

也就是说,根据是否有子栏目先拼凑好栏目分类的 html,再通过 $wp_list_table->display(); 显示到前台。

时间: 2024-10-12 02:24:31

WordPress后台edit-tags.php里无限栏目分类实现的相关文章

黄聪:WordPress 后台发布文章时提示用户选择分类

很多用户在后台发布文章,常常会忘记选择分类,所以很有必要添加一个提醒功能,如果没有选择分类,点击发布时,就显示一个提示信息.要实现这个功能,只要将下面的代码添加到主题的 functions.php 即可: /** * WordPress 发布文章前必须选择分类 * http://www.wpdaxue.com/choose-a-category-before-publish.html */ add_action('admin_footer-post.php', 'choose_a_categor

WordPress后台的文章、分类,媒体,页面,评论,链接等所有信息中显示ID并将ID设置为第一列

WordPress后台默认是不显示文章.分类等信息ID的,查看起来非常不方便,不知道Wp团队出于什么原因默认不显示这个但可以使用Simply Show IDs插件来实现 不使用插件,其他网友的实现: <?php /** *为WordPress后台的文章.分类等显示ID From wpdaxue.com * ID默认添加到列的后面 * http://www.wpdaxue.com/simply-show-ids.html * htl add 2015-01-16 */ //添加一个新的列 ID f

解决WordPress后台安装主题、插件图片不显示的问题

今天搭建wordpress发现现在主题的时候预览图片都没有了,于是搜索了一下,发现下面的这个方法确实管用,于是转载收藏. 有在WordPress后台安装主题.插件的小伙伴可能会遇到主题.插件图片不显示的问题,这给我们照成了不便.说到底还不是墙的问题,所以咱可以通过修改本地的hosts文件来决解. 决解方法 打开C:\WINDOWS\system32\drivers\etc目录里的hosts文件,将以下代码追加到hosts文件尾并保存,代码来自 Uazoh优佐生活 #wpCDN 93.184.21

WordPress 后台文章列表设置文章特色图片(缩略图)集成版

functions.php添加以下代码 /** * WordPress 后台文章列表设置文章特色图片(缩略图)集成版 * Plugin Name: Easy Thumbnail Switcher */ class doocii_Easy_Thumbnail_Switcher { public $add_new_str; public $change_str; public $remove_str; public $upload_title; public $upload_add; public

修改wordpress后台之css路径问题

有时候我们需要修改WordPress后台的一些样式,最直接的办法就是直接修改WordPress后台的CSS文件,可是这样做,每次WordPress更新都要重新修改一次,好不麻烦! CSS的意思是层叠样式表,写在后面的样式会覆盖前面的样式,明白了这一点,我们就可以不用修改WordPress后台样式文件而达到定制WordPress后台的目的. 在下面的代码中,我们把对WordPress后台样式做的一些修改命名为`wp-admin.css`,然后放到主题文件夹里,然后通过`admin_head`这个主

WordPress后台在删除文章的问题&mdash;&mdash;移动到回收站错误

本人买的是阿里云的服务器,在配置了虚拟主机和用户以后,(在配置虚拟主机的时候,一定要选择wordpress的重写方法)开始安装wordpress.安装好以后,发现在写文章的时候,删除文章发生"移动到回收站发生错误的问题",但是文章已经删除了.今天找到了问题的原因,以及解决办法. 原因是:在wordpress(/usr/local/nginx/cong/wordpress.conf)的重写方法里,固定连 大专栏  WordPress后台在删除文章的问题--移动到回收站错误接存在问题. 解

夺命雷公狗ThinkPHP项目之----企业网站8之栏目的添加完善(无限极分类的完成)

我们刚才只是完成了添加的一部分,但是我们的上级分类也不能永远都是只有一个死的嘛,所以我们需要对她进行修改: 我们先将add方法里面的数据查出来再说: 然后在模板页进行遍历: 展示效果如下所示: 虽然是出现了,但是没有向我们平常时候见到的无限极分类一样噢,一般比如分类 多多,分类下面的 好多美女啊 是多多的下级分类,那么好多美女啊他前面是有几个空格之类的隔开, 那么我们就需要在model层里面对她进行排序的设置了: <?php namespace Admin\Model; use Think\Mo

别让Open Sans字体拖慢wordpress后台速度

最近打开wordpress后台是不是很慢?国内GG登不上了?这两者有没什么直接的联系?没错,WordPress后台是自动加载的谷歌Open Sans字体,据说gg服务器已经迁移到阿嘛丽可,需要一些小手段才能访问.既然如此,那就把Open Sans字体屏蔽了吧. 将如下代码复制到主题文件function.php ? 1 2 3 4 5 6 7 8 9 10 11 12 13 //禁用Open Sans字体 function remove_open_sans() { wp_deregister_st

如何关闭WordPress后台的主题、插件、版本更新通知?

由于WordPress 更新速度非常快,不论是主题 插件或是版本,每个月少说要执行个好几次,因为更新快,所以WordPress后台加入了更新通知,提醒使用者有新版本了,可以进行插件.主题或是系统更新,可是新版通常是解决旧版Bug,但很容易会产生一些未知Bug,如果你不想要冒这风险,通常可以等一个礼拜看看,没问题再行更新动作. 本来 WordPress 的好意却让有些人造成了困扰,因为有些人就是不想更新,只想用旧版,因为新版总是会加入一些额外.用不到的功能,造成程序的肥大等等问题,可是后台的更新通