这篇文章关键详细介绍了WordPress 自定文章列表列的完成方式,必须的盆友能够参照下
上一篇,大家应用 Meta Box 为文章加上了一个“推荐指数”字段名。加上后用了一段时间,好像不那麼便捷,编写文章尽管便捷了,可是在文章列表里却不可以形象化的显示信息出文章推荐指数,并且不可以依据推荐指数来排序文章,由于这种不够,今日就来健全一下,使他更便捷功能强大。
今日要完成的实际效果如下图,实际的作用便是在列表里加上一列“推荐指数”,用于显示信息每章文章的推荐指数,另外能够依据“推荐指数”来开展文章排序。
最先要做的便是在表头加上“推荐指数”列。
PHP Code拷贝內容到剪贴板
- function add_rating_column($columns) {
- $columns[‘rating’] = ‘推荐指数’;
- return $columns;
- }
- add_filter(‘manage_posts_columns’ , ‘add_rating_column’);
manage_posts_columns Filter能够程序管理文章网页页面的表头内,用于改动表头信息内容。留意该Filter不容易运用到Page的列表网页页面,如要用到,请应用manage_pages_columns 或是 manage_${post_type}_posts_columns
拥有表头,仅仅加上了这一列,可是该列都还没內容,大家来为该列添充数据信息。
PHP Code拷贝內容到剪贴板
- function rating_column_content($column_name, $post_id) {
- if ($column_name == ‘rating’) {
- $rating_value = get_post_meta( $post_id, ‘_rating’, true );
- echo ($rating_value / 2) . ‘星’;
- }
- }
- add_action(‘manage_posts_custom_column’, ‘rating_column_content’, 10, 2);
这儿采用了 manage_posts_custom_column Action,查询该Action的文本文档,我们可以了解该Action能够用于加上或改动列表的列,包含內建的及其自定的列表列。该Action 接纳2个主要参数,第一个是列表列的姓名($column_name,即第一步中的’rating’,并非’推荐指数’),第二个是当今的文章ID($post_id)。依据这两个主要参数,大家就可以依据当前端的姓名来获得文章的基本信息了。
这儿根据分辨当今列表列是否’rating’,是则依据文章ID获得到推荐指数的值,并恢复出厂设置輸出。
接下去使他可以开展排序。根据 manage_edit-post_sortable_columns Filter来特定什么列能够用于排序。
PHP Code拷贝內容到剪贴板
- function rating_column_table_sorting( $columns ) {
- $columns[‘rating’] = ‘rating’;
- return $columns;
- }
- add_filter( ‘manage_edit-post_sortable_columns’, ‘rating_column_table_sorting’ );
加上后,点一下“推荐指数”列表头,能够见到网页页面的详细地址早已变来到排序的网页页面(/wp-admin/edit.php?orderby=rating&order=asc),可是列表却并沒有排序。这是由于WordPress并不怎样依据’rating’来排序。
接下去就告知WordPress怎样依据’rating’排序。
PHP Code拷贝內容到剪贴板
- function rating_column_orderby( $vars ) {
- if ( isset( $vars[‘orderby’] ) && $vars[‘orderby’] == ‘rating’ ) {
- $vars[‘orderby’] = ‘meta_value_num’;
- $vars[‘meta_key’] = ‘_rating’;
- }
- return $vars;
- }
- add_filter( ‘request’, ‘rating_column_orderby’ );
这儿大家根据更改request Filter,分辨当今是不是有’orderby’主要参数,及其是不是相当于’rating’,如果是,则将orderby=meta_value_num和meta_key=_rating添加来到当今要求的query vars中,那样WordPress就了解必须依据自定字段名’_rating’的整数金额次序来排序。
到此,自定文章列表列的作用早已完成。这儿仅仅一个实例,稍加改动,便能够将“推荐指数”换为你文章中的一切数据信息,进而完成不一样网站的不一样要求。
此外,是不是你又注意到自身依据实例教程完成的实际效果有点儿不一样?你的“推荐指数”在最终一列?
对你说一个小窍门,在第一段编码中,发送给Filter的主要参数$columns,是一个列的数组,包括了全部的列的信息内容,在沒有自定列的状况下,回到的便是內建的列,其次序以下:cb(勾选框)、title(题目)、author(创作者)、categories(专业分类)、tags(标识)、comments(评价)、date(日期)。假如要将自定的列加到特殊部位,就必须循环系统该数组,到特殊部位时,再加上自定的列,编码以下。假如必须删掉一些列,在循环系统中删掉该key=>value就可以(编码中注解的一部分,删除了评价列)。
PHP Code拷贝內容到剪贴板
- function add_rating_column($columns) {
- $new = array();
- foreach($columns as $key => $title) {
- if ($key == ‘comments’) {
- $new[‘rating’] = ‘推荐指数’;
- }
- // if ($key == ‘comments’) {
- // continue;
- // }
- $new[$key] = $title;
- }
- return $new;
- }