函数文档

_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()

Return

WP_List_Table|false List table object on success, false if the class does not exist.

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.