retrieve_widgets
函数
retrieve_widgets ( $theme_changed = false )
- 参数
-
-
(string|bool)
$theme_changed
Whether the theme was changed as a boolean. A value of ‘customize’ defers updates for the Customizer.- Required: 否
- Default: false
-
(string|bool)
- 返回值
-
- (array) Updated sidebars widgets.
- 定义位置
-
-
wp-includes/widgets.php
, line 1313
-
wp-includes/widgets.php
- 引入
- 2.8.0
- 弃用
- –
验证并重新映射任何 “orphaned”部件到wp_inactive_widgets侧边栏,并保存部件设置。这至少要在每次更换主题时运行。
例如,假设主题A有一个 “footer”侧边栏,而主题B没有。从主题A切换到主题B后,所有之前分配给页脚的小工具都将无法使用。这个函数可以检测到这种情况,并将之前分配给页脚的所有部件移到wp_inactive_widgets下。
尽管名字中有 “retrieve”一词,这个函数实际上是在更新数据库和全局的`$sidebars_widgets`。由于这个原因,它不应该在前端运行,除非`$theme_changed`的值是’customize’(以绕过数据库的写入)。
function retrieve_widgets( $theme_changed = false ) { global $wp_registered_sidebars, $sidebars_widgets, $wp_registered_widgets; $registered_sidebars_keys = array_keys( $wp_registered_sidebars ); $registered_widgets_ids = array_keys( $wp_registered_widgets ); if ( ! is_array( get_theme_mod( 'sidebars_widgets' ) ) ) { if ( empty( $sidebars_widgets ) ) { return array(); } unset( $sidebars_widgets['array_version'] ); $sidebars_widgets_keys = array_keys( $sidebars_widgets ); sort( $sidebars_widgets_keys ); sort( $registered_sidebars_keys ); if ( $sidebars_widgets_keys === $registered_sidebars_keys ) { $sidebars_widgets = _wp_remove_unregistered_widgets( $sidebars_widgets, $registered_widgets_ids ); return $sidebars_widgets; } } // Discard invalid, theme-specific widgets from sidebars. $sidebars_widgets = _wp_remove_unregistered_widgets( $sidebars_widgets, $registered_widgets_ids ); $sidebars_widgets = wp_map_sidebars_widgets( $sidebars_widgets ); // Find hidden/lost multi-widget instances. $shown_widgets = array_merge( ...array_values( $sidebars_widgets ) ); $lost_widgets = array_diff( $registered_widgets_ids, $shown_widgets ); foreach ( $lost_widgets as $key => $widget_id ) { $number = preg_replace( '/.+?-([0-9]+)$/', '$1', $widget_id ); // Only keep active and default widgets. if ( is_numeric( $number ) && (int) $number
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。