这里有一种方法:
扩展post list表,假设我们要针对post
岗位类型。
我们追求的用户界面如下:
我们可以简单地按帖子内容长度排序,然后使用批量功能删除空帖子。
我们可以通过四个步骤实现这一目标:
步骤#1
在标题列旁边添加长度列:
add_filter(\'manage_post_posts_columns\', function ( $columns )
{
$_columns = [];
foreach( (array) $columns as $key => $label )
{
$_columns[$key] = $label;
if( \'title\' === $key )
$_columns[\'wpse_post_content_length\'] = __( \'Length\' );
}
return $_columns;
} );
步骤2用post内容长度值填充该列:
add_action( \'manage_post_posts_custom_column\', function ( $column_name, $post_id )
{
if ( $column_name == \'wpse_post_content_length\')
echo mb_strlen( get_post( $post_id )->post_content );
}, 10, 2 );
步骤3使列的长度可排序:
add_filter( \'manage_edit-post_sortable_columns\', function ( $columns )
{
$columns[\'wpse_post_content_length\'] = \'wpse_post_content_length\';
return $columns;
} );
最后,我们通过
posts_orderby
过滤器:
add_filter( \'posts_orderby\', function( $orderby, \\WP_Query $q )
{
$_orderby = $q->get( \'orderby\' );
$_order = $q->get( \'order\' );
if(
is_admin()
&& $q->is_main_query()
&& \'wpse_post_content_length\' === $_orderby
&& in_array( strtolower( $_order ), [ \'asc\', \'desc\' ] )
) {
global $wpdb;
$orderby = " LENGTH( {$wpdb->posts}.post_content ) " . $_order . " ";
}
return $orderby;
}, 10, 2 );
如果您想针对其他帖子类型,我们只需修改
manage_post_posts_columns -> manage_{POST_TYPE}_posts_columns
manage_post_posts_custom_column -> manage_{POST_TYPE}_posts_custom_column
manage_edit-post_sortable_columns -> manage_edit-{POST_TYPE}_sortable_columns
在哪里
POST_TYPE
是通缉职位类型。