_get_list_table()
云策文档标注
概述
_get_list_table() 函数用于获取 WP_List_Table 类的实例,支持核心列表表类如文章、媒体、用户等,并可传递参数进行自定义。它通过类名加载对应的列表表对象,若类不存在则返回 false。
关键要点
- 函数参数:$class_name(必需,字符串类型,指定列表表类名),$args(可选,数组类型,可传递 'screen' 参数)。
- 返回值:成功时返回 WP_List_Table 对象,失败时返回 false。
- 核心类支持:包括站点管理(如 WP_Posts_List_Table)、网络管理(如 WP_MS_Sites_List_Table)和隐私请求表等。
- 内部处理:自动加载核心类文件,处理屏幕参数,并应用 wp_list_table_class_name 过滤器以允许自定义类名。
- 相关函数:如 get_current_screen() 和 convert_to_screen() 用于屏幕对象处理。
代码示例
// 获取文章列表表实例
$posts_list_table = _get_list_table( 'WP_Posts_List_Table' );
// 传递参数获取自定义屏幕的列表表
$args = array( 'screen' => 'edit-post' );
$media_list_table = _get_list_table( 'WP_Media_List_Table', $args );注意事项
- 确保传递的类名存在于核心类数组中,否则函数将返回 false。
- 使用 wp_list_table_class_name 过滤器可以动态修改实例化的类名,适用于扩展或替换默认列表表。
- 参数 $args 中的 'screen' 可以是字符串或屏幕对象,函数会自动转换。
原文内容
Fetches an instance of a WP_List_Table class.
Parameters
$class_namestringrequired-
The type of the list table, which is the class name.
$argsarrayoptional-
Arguments to pass to the class. Accepts
'screen'.Default:
array()
Source
function _get_list_table( $class_name, $args = array() ) {
$core_classes = array(
// Site Admin.
'WP_Posts_List_Table' => 'posts',
'WP_Media_List_Table' => 'media',
'WP_Terms_List_Table' => 'terms',
'WP_Users_List_Table' => 'users',
'WP_Comments_List_Table' => 'comments',
'WP_Post_Comments_List_Table' => array( 'comments', 'post-comments' ),
'WP_Links_List_Table' => 'links',
'WP_Plugin_Install_List_Table' => 'plugin-install',
'WP_Themes_List_Table' => 'themes',
'WP_Theme_Install_List_Table' => array( 'themes', 'theme-install' ),
'WP_Plugins_List_Table' => 'plugins',
'WP_Application_Passwords_List_Table' => 'application-passwords',
// Network Admin.
'WP_MS_Sites_List_Table' => 'ms-sites',
'WP_MS_Users_List_Table' => 'ms-users',
'WP_MS_Themes_List_Table' => 'ms-themes',
// Privacy requests tables.
'WP_Privacy_Data_Export_Requests_List_Table' => 'privacy-data-export-requests',
'WP_Privacy_Data_Removal_Requests_List_Table' => 'privacy-data-removal-requests',
);
if ( isset( $core_classes[ $class_name ] ) ) {
foreach ( (array) $core_classes[ $class_name ] as $required ) {
require_once ABSPATH . 'wp-admin/includes/class-wp-' . $required . '-list-table.php';
}
if ( isset( $args['screen'] ) ) {
$args['screen'] = convert_to_screen( $args['screen'] );
} elseif ( isset( $GLOBALS['hook_suffix'] ) ) {
$args['screen'] = get_current_screen();
} else {
$args['screen'] = null;
}
/**
* Filters the list table class to instantiate.
*
* @since 6.1.0
*
* @param string $class_name The list table class to use.
* @param array $args An array containing _get_list_table() arguments.
*/
$custom_class_name = apply_filters( 'wp_list_table_class_name', $class_name, $args );
if ( is_string( $custom_class_name ) && class_exists( $custom_class_name ) ) {
$class_name = $custom_class_name;
}
return new $class_name( $args );
}
return false;
}
Hooks
- apply_filters( ‘wp_list_table_class_name’, string $class_name, array $args )
-
Filters the list table class to instantiate.
Changelog
| Version | Description |
|---|---|
| 3.1.0 | Introduced. |