函数文档

wp_get_sidebars_widgets()

💡 云策文档标注

概述

wp_get_sidebars_widgets() 函数用于检索所有侧边栏及其小部件实例ID的完整列表。它会根据需要升级侧边栏小部件列表并保存更新,返回一个数组格式的数据。

关键要点

  • 函数返回一个关联数组,包含侧边栏及其小部件实例ID的列表。
  • 在非管理界面(前端)加载时,会优先使用全局变量 $_wp_sidebars_widgets 以提高性能,避免重复查询数据库。
  • 在管理界面(后端)加载时,直接通过 get_option() 从数据库获取数据。
  • 函数包含一个已弃用的参数 $deprecated,自 WordPress 2.8.1 起不再使用,调用时建议保持默认值 true。
  • 返回的数据会通过 sidebars_widgets 过滤器进行过滤,允许开发者自定义输出。
  • 函数会自动移除数组中的 array_version 键,确保数据格式兼容性。

代码示例

function wp_get_sidebars_widgets( $deprecated = true ) {
    if ( true !== $deprecated ) {
        _deprecated_argument( __FUNCTION__, '2.8.1' );
    }

    global $_wp_sidebars_widgets, $sidebars_widgets;

    if ( ! is_admin() ) {
        if ( empty( $_wp_sidebars_widgets ) ) {
            $_wp_sidebars_widgets = get_option( 'sidebars_widgets', array() );
        }
        $sidebars_widgets = $_wp_sidebars_widgets;
    } else {
        $sidebars_widgets = get_option( 'sidebars_widgets', array() );
    }

    if ( is_array( $sidebars_widgets ) && isset( $sidebars_widgets['array_version'] ) ) {
        unset( $sidebars_widgets['array_version'] );
    }

    return apply_filters( 'sidebars_widgets', $sidebars_widgets );
}

注意事项

  • 参数 $deprecated 已弃用,应避免传递非 true 的值,否则会触发 _deprecated_argument() 警告。
  • 函数依赖于全局变量 $_wp_sidebars_widgets 和 $sidebars_widgets,在自定义开发中需注意变量作用域。
  • 返回的数组可能包含空侧边栏或无效小部件ID,调用方应进行适当的数据验证。
  • 此函数在 WordPress 2.2.0 中引入,是处理侧边栏小部件数据的核心函数之一。

📄 原文内容

Retrieves the full list of sidebars and their widget instance IDs.

Description

Will upgrade sidebar widget list, if needed. Will also save updated list, if needed.

Parameters

$deprecatedbooloptional
Not used (argument deprecated).

Default:true

Return

array Upgraded list of widgets to version 3 array format when called from the admin.

Source

function wp_get_sidebars_widgets( $deprecated = true ) {
	if ( true !== $deprecated ) {
		_deprecated_argument( __FUNCTION__, '2.8.1' );
	}

	global $_wp_sidebars_widgets, $sidebars_widgets;

	/*
	 * If loading from front page, consult $_wp_sidebars_widgets rather than options
	 * to see if wp_convert_widget_settings() has made manipulations in memory.
	 */
	if ( ! is_admin() ) {
		if ( empty( $_wp_sidebars_widgets ) ) {
			$_wp_sidebars_widgets = get_option( 'sidebars_widgets', array() );
		}

		$sidebars_widgets = $_wp_sidebars_widgets;
	} else {
		$sidebars_widgets = get_option( 'sidebars_widgets', array() );
	}

	if ( is_array( $sidebars_widgets ) && isset( $sidebars_widgets['array_version'] ) ) {
		unset( $sidebars_widgets['array_version'] );
	}

	/**
	 * Filters the list of sidebars and their widgets.
	 *
	 * @since 2.7.0
	 *
	 * @param array $sidebars_widgets An associative array of sidebars and their widgets.
	 */
	return apply_filters( 'sidebars_widgets', $sidebars_widgets );
}

Hooks

apply_filters( ‘sidebars_widgets’, array $sidebars_widgets )

Filters the list of sidebars and their widgets.

Changelog

Version Description
2.2.0 Introduced.