• 售前

  • 售后

热门帖子
入门百科

WordPress 自界说文章列表列的实现方法

[复制链接]
贰十岁装成熟装s 显示全部楼层 发表于 2021-8-15 20:20:50 |阅读模式 打印 上一主题 下一主题
上一篇,我们使用 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 担当两个参数,第一个是列表列的名字($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;      
  • }  

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作