WordPress 管理后台的默认文章列表,主要包含文章的标题、作者、分类、标签、评论数、日期等。

但是,很多时候我们还需要直观的文章ID、图片数量、是否被百度收录等自定义信息,如下图:

上图来自于米扑博客(博主:阳光岛主、sunboy_2050)的管理后台,如何做到呢?

 

类似的场景其实还有很多,例如:

1、管理后台直观的显示每篇文章ID,否则每次想知道文章ID,都要F12进入开发者模式查看,且每次还只能看一篇文章ID,太麻烦

2、管理后台显示每篇文章的图片和视频总数,当然也可以分别统计显示。一般视频较少,推荐一起统计更实用、简单

3、使用了显示阅读数的插件,需要显示出阅读数(views)

4、加入了百度收录的字段,想在后台查看每篇文章的收录状态。当然,也可以继续扩展到搜狗、360、Bing、谷歌等是否收录,原理都一样,加几行代码就好了

5、在一些电子商务主题上,需要将一个商品的价格、剩余数量、购买销量、团购网站的时间段等信息显示出来

所以,如果你要建一个个性化的网站,这篇文章很重要。本文推荐的文章更重要,给你实践的成功机会喔。

 

好了,这篇文章重要性不多说,懂的自然懂,下面正式干活儿。

 

后台文章列表页面添加列

我们要改变文章管理页面输出的内容,首先肯定要使用过滤器来过滤输出的参数

我们要用到自定义过滤器格式: manage_{post_type}_posts_column

比如:wordpress默认的“post”本应该使用过滤器manage_post_posts_columns,

但是,由于wordpress 对默认文章类型提供了捷径,可以直接使用 manage_posts_columns manage_pages_columns

对于前面自己创建的book类型文章,属于自定义类型,所以应该是manage_book_posts_columns,该过滤器位于wp-admin/includes/class-wp-posts-list-table.php文件中,推荐你参阅下此文件。下面我先以book为例(使用默认的twenty ten主题测试,首先请参考前面的文章使用twenty ten主题创建一个自定义文章类型,打开并编辑我们前面创建自定义文章类型时使用的post-type.php文件,当然你也可以直接使用functions.php文件):

add_filter('manage_book_posts_columns', 'add_new_book_columns');   
  
function add_new_book_columns($book_columns) {   
       
    $new_columns['cb'] = '<input type="checkbox" />';//这个是前面那个选框,不要丢了   
  
    $new_columns['id'] = __('ID');   
    $new_columns['title'] = '书本名';   
    $new_columns['images'] = __('Images');   
    $new_columns['author'] = __('Author');   
       
    $new_columns['categories'] = __('Categories');   
    $new_columns['tags'] = __('Tags');   
    
    $new_columns['date'] = _x('Date', 'column name');   
  
    //直接返回一个新的数组   
    return $new_columns;   
}  

效果如下图:

上图里,ID 和 图像是自定义新创建的,用来显示文章ID和图片数量。

事情到此还没完呢,虽然看到了我们添加的列,但是列名 ID 和 图像,都还没有数据呢。。。

 

 

添加函数给自定义列赋值

显示具体的列是在wp-admin/includes/class-wp-posts-list-table.php文件类的single_row函数,

函数的foreach循环中对于title\author都有具体的显示方法,后面else提供了动作钩子:manage_{$post->post_type}_posts_custom_column,

我们自己添加的列当然属于else,所以我们将使用这个动作钩子来显示列中的具体值。

add_action('manage_book_posts_custom_column', 'manage_book_columns', 10, 2);   
    
function manage_book_columns($column_name, $id) {   
    global $wpdb;   
    switch ($column_name) {   
    case 'id':   
        echo $id;   
        break;   
    
    case 'images':   
        //通过数据库查询附件数量   
        $num_images = $wpdb->get_var($wpdb->prepare("SELECT COUNT(*) FROM $wpdb->posts WHERE post_parent = {$id};"));   
        echo $num_images;    
        break;   
    default:   
        break;   
    }   

 

数据添加完成,看效果如下:



OK,自定义显示字段,顺利完成。

 

 

简单的添加ID和阅读数列

不过,一般人用不到上面的自定义,太折腾,本文在最下面的参考推荐示例里,会留给爱折腾的人去折腾,哈

这里,先满足大多数不喜欢折腾的人,只想将默认文章的ID显示出来,下面直接给出添加ID的代码

复制下面的代码添加到主题目录下的functions.php中即可:

cd wp-content/themes/officefolders/
vim functions.php

添加以下代码:

/** 后台管理文章显示ID **/
/**********文章添加自定义列***********/  
add_filter('manage_posts_columns', 'add_postid_posts_columns');   
function add_postid_posts_columns($book_columns) {   
    $new_columns['cb'] = '<input type="checkbox" />';   
    $new_columns['id'] = __('ID');   
    $new_columns['title'] = _x( 'Title', 'column name' );   
    $new_columns['author'] = __('Author');   
    $new_columns['categories'] = __('Categories');   
    $new_columns['tags'] = __('Tags');   
    $new_columns['date'] = _x('Date', 'column name');   
    $new_columns['comments'] = _x('评论', 'column name');   
    $new_columns['views'] = _x('Views', 'column name');   
    return $new_columns;   
}   
add_action('manage_posts_custom_column', 'manage_book_columns', 10, 2);   
function manage_book_columns($column_name, $id) {   
    global $wpdb;   
    switch ($column_name) {   
    case 'id':   
        echo $id;   
        break;   
    default:
        break;
    }
}

/**************页面添加自定义列************/
add_filter('manage_pages_columns', 'add_new_pages_columns');
function add_new_pages_columns($book_columns) {
    $new_columns['cb'] = '<input type="checkbox" />';
    $new_columns['id'] = __('ID');
    $new_columns['title'] = _x( 'Title', 'column name' );
    $new_columns['author'] = __('Author');
    $new_columns['date'] = _x('Date', 'column name');
    $new_columns['comments'] = _x('评论', 'column name');
    $new_columns['views'] = _x('Views', 'column name');
    return $new_columns;
}
add_action('manage_pages_custom_column', 'manage_pages_columns', 10, 2);
function manage_pages_columns($column_name, $id) {
    global $wpdb;
    switch ($column_name) {
    case 'id':
        echo $id;
        break;
    default:
        break;
    }
}

实现的效果,如下图:

 

补充知识

若你一开始不知道自己的后台管理文章列表包含哪些字段,这里教你一个方法去查看

按F12,进入开发者模式,查看后台管理页面,如下图:

发现了没有,id 值就是上面代码的列字段,例如:  $new_columns['id'] 、$new_columns['title'] 等等

__()表示自定义列, _x() 表示WordPress自带定义的列 (哈,纯属自己猜想,留请高人解答)

 

 

高级的添加ID、图像数量、百度收录列

最后,还是给出一个高级的自定义版本的完整代码

/** 后台管理文章显示ID **/
/**********文章添加自定义列***********/  
add_filter('manage_posts_columns', 'add_postid_posts_columns');   
function add_postid_posts_columns($book_columns) {   
    $new_columns['cb'] = '<input type="checkbox" />';   
    $new_columns['id'] = __('ID');   
    $new_columns['title'] = _x( 'Title', 'column name' );   
    $new_columns['images'] = __( 'Images');   
    $new_columns['author'] = __('Author');   
    $new_columns['categories'] = __('Categories');   
    $new_columns['tags'] = __('Tags');   
    $new_columns['date'] = _x('Date', 'column name');   
    $new_columns['comments'] = _x('评论', 'column name');   
    $new_columns['views'] = _x('Views', 'column name');   
    $new_columns['baidu_record'] = _x('百度收录', 'column name');   
    return $new_columns;   
}   
add_action('manage_posts_custom_column', 'manage_book_columns', 10, 2);   
function manage_book_columns($column_name, $id) {   
    global $wpdb;   
    switch ($column_name) {   
    case 'id':   
        echo $id;   
        break;   

    case 'images':    
        $num_images = $wpdb->get_var($wpdb->prepare("SELECT COUNT(*) FROM $wpdb->posts WHERE post_parent = {$id};"));   
        echo $num_images;    
        break;   

    case 'baidu_record':    
        $baidu_record = $wpdb->get_var($wpdb->prepare("SELECT meta_value FROM $wpdb->postmeta WHERE post_id = {$id} and meta_key = 'baidu_record';"));   
        @$record_url='http://zhanzhang.baidu.com/sitesubmit/index?sitename='.get_permalink();
        @$result="<a style='color:red;' target='_blank' href=\"$record_url\">未收录</a>";
        if($baidu_record=="1") {
//            echo $baidu_record;    
//            echo "是";
            $record_url='http://www.baidu.com/s?wd=sitemap:blog.mimvp.com '.get_the_title();
            @$result="<a style='color:blue;' target='_blank' href=\"$record_url\">已收录</a>";
        }
        echo $result;
        break;
    default:
        break;
    }
}

/**************页面添加自定义列************/
add_filter('manage_pages_columns', 'add_new_pages_columns');
function add_new_pages_columns($book_columns) {
    $new_columns['cb'] = '<input type="checkbox" />';
    $new_columns['id'] = __('ID');
    $new_columns['title'] = _x( 'Title', 'column name' );
    $new_columns['author'] = __('Author');
    $new_columns['date'] = _x('Date', 'column name');
    $new_columns['comments'] = _x('评论', 'column name');
    $new_columns['views'] = _x('Views', 'column name');
    return $new_columns;
}
add_action('manage_pages_custom_column', 'manage_pages_columns', 10, 2);
function manage_pages_columns($column_name, $id) {
    global $wpdb;
    switch ($column_name) {
    case 'id':
        echo $id;
        break;
    default:
        break;
    }
}

聪明的人一看就知道后面我将要说什么了,或者他自己直接就做出来了

实现效果,见本文上面的第一张图,想实现吗?

想的话,请继续折腾米扑博客的如下参考推荐

 

 

参考推荐

米扑博客:WordPress 百度收录检测与后台文章显示收录状态

米扑博客:总结分享 WordPress显示评论者IP归属地、浏览器、终端设备、电信运营商

CSDN博客搬家到WordPress

WordPress 添加投稿功能

WordPress 防止垃圾评论方法

WordPress 升级修改配置备忘录

 

哈哈,参考推荐都是米扑博客实现的经典功能,

你要是全部都实现了,说明你很厉害

你要是一周内全部实现了,说明你真的很厉害

 

最后,声明一下,本文参考了 wordpress进阶教程(四):在文章管理列表添加自定义列,并做了许多改进,也算我自己的折腾吧 😄