这个WP_Posts_List_Table
类扩展WP_List_Table
并且在WP_List_Table::views()
方法我们有以下动态视图过滤器:
/**
* Filter the list of available list table views.
*
* The dynamic portion of the hook name, `$this->screen->id`, refers
* to the ID of the current screen, usually a string.
*
* @since 3.5.0
*
* @param array $views An array of available list table views.
*/
$views = apply_filters( "views_{$this->screen->id}", $views );
所以我们可以使用生成的
views_edit-post
筛选以调整后列表表的视图。
示例:
让我们删除非管理员(
PHP 5.4+)的所有、发布、未来、粘性、草稿、待处理和垃圾:
/**
* Remove the \'all\', \'publish\', \'future\', \'sticky\', \'draft\', \'pending\', \'trash\'
* views for non-admins
*/
add_filter( \'views_edit-post\', function( $views )
{
if( current_user_can( \'manage_options\' ) )
return $views;
$remove_views = [ \'all\',\'publish\',\'future\',\'sticky\',\'draft\',\'pending\',\'trash\' ];
foreach( (array) $remove_views as $view )
{
if( isset( $views[$view] ) )
unset( $views[$view] );
}
return $views;
} );
您可以在其中修改
$remove_views
满足您的需求。另一种方法是只拾取我的视图并只返回该视图。
然后,我们可以尝试使用以下命令进一步强制查看我的视图:
/**
* Force the \'mine\' view on the \'edit-post\' screen
*/
add_action( \'pre_get_posts\', function( \\WP_Query $q )
{
if(
is_admin()
&& $q->is_main_query()
&& \'edit-post\' === get_current_screen()->id
&& ! current_user_can( \'manage_options\' )
)
$q->set( \'author\', get_current_user_id() );
} );
Before:
After: