WordPress 自定义文章列表列的实现方法

2019-02-19 14:13:34刘景俊
上一篇,我们使用 Meta Box 为文章添加了一个“推荐指数”字段。添加后用了一段时间,似乎不那么方便,编辑文章虽然方便了,但是在文章列表里却不能直观的显示出文章推荐指数,而且不能根据推荐指数来排序文章,鉴于这些不足,今天就来完善一下,让他更方便好用。

今天要实现的效果如下图,具体的功能就是在列表里添加一列“推荐指数”,用来显示每篇文章的推荐指数,同时可以根据“推荐指数”来进行文章排序。





首先要做的就是在表头添加“推荐指数”列。
PHP Code复制内容到剪贴板
  1. function add_rating_column($columns) {        $columns['rating'] = '推荐指数';   
  2.     return $columns;    }   
  3. add_filter('manage_posts_columns' , 'add_rating_column');   

manage_posts_columns Filter可以应用管理文章页面的表头里,用来修改表头信息。注意该Filter不会应用到Page的列表页面,如需用到,请使用manage_pages_columns 或者 manage_${post_type}_posts_columns

有了表头,只是添加了这一列,但是该列还没有内容,我们来为该列填充数据。

PHP Code复制内容到剪贴板
  1. function rating_column_content($column_name, $post_id) {        if ($column_name == 'rating') {   
  2.         $rating_value = get_post_meta( $post_id, '_rating', true );            echo ($rating_value / 2) . '星';   
  3.     }    }   
  4. add_action('manage_posts_custom_column', 'rating_column_content', 10, 2);   

这里用到了 manage_posts_custom_column Action,查看该Action的文档,我们可以知道该Action可以用来添加或修改列表的列,包括内建的以及自定义的列表列。该Action 接受两个参数,第一个是列表列的名字($column_name,即第一步中的’rating’,而非’推荐指数’),第二个是当前的文章ID($post_id)。根据这两个参数,我们就可以根据当前列的名字来获取文章的相关信息了。

这里通过判断当前列表列是不是’rating’,是则根据文章ID获取到推荐指数的值,并格式化输出。