之前我通过在baidu上搜索如何不用插件的情况下在wordpress上添加文章阅读次数并实现,现在想在后台的文章列表里面显示他,于是又去搜索了一下,发现有关WP的文章真是太多了,这篇文章主要参考XinJiXiWang的博客,一共四步主要会用到

1.过滤器: manage_posts_columns 管理文章页列表

2.动作:manage_posts_custom_column 管理自定义的列的值

3.过滤器:manage_edit-post_sortable_columns 管理文章页的列是否支持排序

4.过滤器:request 用query string形式向 wordprss 传递排序参数

首先要做的就是在表头添加“查看”列。

/**
 * 后台Post显示自定义列
 * @param $columns 所有的列
 * @return mixed
 */
function atom_add_new_column ($columns) {
    $new_col = [];
    foreach ($columns as $slug => $title) {
        if ($slug == "date") {
            $new_col['views'] = "查看";
        }
        $new_col[$slug] = $title;
    }
//    unset($new_col['tags']); 这里可以删除任何不爽的列
//    unset($new_col['comments']);
    return $new_col;
}
add_filter("manage_posts_columns","atom_add_new_column");

manage_posts_columns可以应用管理文章页面的表头里,用来修改表头信息。注意该Filter不会应用到Page的列表页面,如需用到,请使用manage_pages_columns或者manage_${post_type}_posts_columns
有了表头,只是添加了这一列,但是该列还没有内容,我们来为该列填充数据。

function atom_custom_column_value ($column_name, $pid) {
    if ($column_name == "views") {
        $col_val = get_post_meta($pid,"views",true);
        echo $col_val ? $col_val : 0;
    }

}
add_action("manage_posts_custom_column","atom_custom_column_value",10,2);

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

这里通过判断当前列表列是不是’views’,是则根据文章ID获取到 “ 查看 ”的值,并格式化输出。

接下来让他能够进行排序。通过manage_edit-post_sortable_columnsFilter来指定哪些列可以用来排序。

function atom_custom_column_sorting($col) {
    $col['views'] = "views";
    return $col;
}
add_filter("manage_edit-post_sortable_columns","atom_custom_column_sorting");

添加后,点击“查看”列表头,可以看到页面的地址已经变到了排序的页面(/wp-admin/edit.php?orderby=views&order=asc),但是列表却并没有排序。这是因为WordPress并不如何根据’views’来排序。

接下来就告诉WordPress如何根据’views’排序。

function atom_custom_col_orderby($vars) {

    if (isset($vars['orderby']) && $vars['orderby'] == "views")  {

        $vars['orderby'] = 'meta_value_num';
        $vars['meta_key'] = "views";
    }
    return $vars;
}
add_filter("request","atom_custom_col_orderby");

这里我们通过改变request Filter,判断当前是否有’orderby’参数,以及是否等于’rating’,如果是,则将orderby=meta_value_num和meta_key=views加入到了当前请求的query vars中,这样WordPress就知道需要根据自定义字段’ views ’的整数顺序来排序。

至此,自定义文章列表列的功能已经实现。这里只是一个示例,稍作修改,便可以将“查看”换成你文章中的任何数据,从而实现不同站点的不同需求。