WordPress后台文章列表可以按照发布日期排序,点击日期表头可以切换排序方向,非常方便。我们知道,和发布时间类似,WordPress文章数据表里面还有一个修改时间的字段,是否可以把「修改时间」这个字段显示到文章列表里面,并使文章列表支持按修改时间进行排序呢?当然是可以的,本文将为您介绍添加修改时间数据列到文章列表,并使其支持点击排序的功能。

添加「修改日期」数据列

首先我们需要使用「manage_posts_columns」这个Hook 添加「修改日期」数据列到WordPress文章列表数据表中。

add_filter( 'manage_posts_columns', static function ( $cols )
	$cols[ 'modified' ]  = __( '修改日期' );

	return $cols;
} );

添加了修改日期数据列之后,我们还需要告诉WordPress在这一列显示什么数据。

添加修改日期数据到新增的修改日期数据列

这一步,我们需要用到「manage_posts_custom_column」这个hook,来告诉WordPress列表类如何显示「modified」这一列的数据。

add_action( 'manage_posts_custom_column', static function ( $column_name )
{
	if ( $column_name === 'modified' ) {
		echo get_post_modified_time( get_option( 'date_format' ), '', get_the_ID() );
	}
} );

执行了上面两步之后,我们就可以在文章列表中看到「修改日期」这一列数据,显示的是文章的最新修改日期。

下面让我们需要再做一些处理,让修改日期这一列数据支持点击排序功能。

使修改日期数据支持点击排序功能

使修改日期数据支持点击排序功能需要使用「manage_edit-post_sortable_columns」这个 Hook,示例代码如下。

add_filter( "manage_edit-post_sortable_columns", function ( $sortable_columns )
{
	$sortable_columns[ 'modified' ] = [ 'modified', true, '修改日期', '按修改日期排序', 'desc' ];

	return $sortable_columns;
} );

做完这一步之后,我们只是在文章列表中让「修改日期」这一列数据显示了支持排序的UI,排序的逻辑还没有实现。

点击修改日期排序时,执行排序处理

要实现文章列表按修改日期排序的逻辑,我们需要使用「pre_get_posts」这个Hook,在执行获取文章查询之前,修改查询,把按日期排序的逻辑添加进去,代码如下:

add_filter( 'pre_get_posts', function ( $wp_query )
{
	global $pagenow;
	if ( is_admin() && 'edit.php' == $pagenow && wprs_input_get( 'orderby' ) === 'modified' ) {
		$wp_query->set( 'orderby', 'modified' );
		$wp_query->set( 'order', wprs_input_get( 'order' ) );
	}
} );

执行完上面的步骤后,我们就可以使WordPress文章列表按修改日期排序了。

本站之前的文章WordPress 在后台文章列表页面显示文章字数数据列 中介绍了添加文章字数数据列的方法,但是并不支持按照文章字数排序的功能,有兴趣的朋友可以参考本文的方法为其添加按照文字数排序的功能。