有一种方法可以将额外的评论状态字段添加到帖子列表中:
add_filter(\'manage_post_posts_columns\', function ( $columns )
{
$_columns = [];
foreach( (array) $columns as $key => $label )
{
$_columns[$key] = $label;
if( \'title\' === $key )
$_columns[\'wpse_comment_status\'] = esc_html__( \'Comment Status\', \'mydomain\' );
}
return $_columns;
} );
add_action( \'manage_post_posts_custom_column\', function ( $column_name, $post_id )
{
if ( $column_name == \'wpse_comment_status\')
echo get_post_field( \'comment_status\', $post_id );
}, 10, 2 );
下面是我们如何通过
posts_orderby
过滤器:
add_filter( \'manage_edit-post_sortable_columns\', function ( $columns )
{
$columns[\'wpse_comment_status\'] = \'comment_status\';
return $columns;
} );
add_filter( \'posts_orderby\', function( $orderby, \\WP_Query $q ) use ( &$wpdb )
{
$_orderby = $q->get( \'orderby\' );
$_order = $q->get( \'order\' );
if(
is_admin()
&& $q->is_main_query()
&& did_action( \'load-edit.php\' )
&& \'comment_status\' === $_orderby
)
$orderby = " {$wpdb->posts}.comment_status "
. ( \'ASC\' === strtoupper( $_order ) ? \'ASC\' : \'DESC\' )
. ", {$wpdb->posts}.ID DESC ";
return $orderby;
}, 10, 2 );
在这里,我们通过post ID进行分订单。
以下是一个示例输出:
PS:自WordPress 4.5以来(
#35601) 可以过滤
WP_Query
通过
comment_status
和
ping_status
, 因此,您也应该能够为posts列表表实现这样的过滤