__('仅限侧栏区域:首页侧栏、文章页侧边栏、全站侧栏、分类/标签/搜索侧栏。', 'aksrt'), 'homepage' => __('仅限首页挂载区域:首页顶部/底部全宽、首页内容上方/下方。', 'aksrt'), 'hybrid' => __('支持侧栏、首页和归档页挂载区域。', 'aksrt'), 'archive' => __('仅限归档页挂载区域:分类页、标签页、搜索页的顶部/底部/侧栏。', 'aksrt'), ]; if (empty($messages[$scope])) { return; } printf('
%s
', esc_html($messages[$scope])); } function aksrt_filter_widget_display_by_area($instance, WP_Widget $widget, array $args) { if ($instance === false) { return false; } $sidebar_id = isset($args['id']) ? (string) $args['id'] : ''; $widget_base_id = isset($widget->id_base) ? (string) $widget->id_base : ''; return aksrt_widget_is_allowed_in_sidebar($widget_base_id, $sidebar_id) ? $instance : false; } add_filter('widget_display_callback', 'aksrt_filter_widget_display_by_area', 10, 3); function aksrt_filter_widget_sidebar_assignments($new_value, $old_value) { if (!is_array($new_value)) { return $new_value; } $removed = []; foreach ($new_value as $sidebar_id => $widget_ids) { if (!is_array($widget_ids) || $sidebar_id === 'wp_inactive_widgets') { continue; } $filtered = []; foreach ($widget_ids as $widget_id) { if (!is_string($widget_id) || $widget_id === '') { continue; } $widget_base_id = aksrt_widget_base_from_id($widget_id); if (aksrt_widget_is_allowed_in_sidebar($widget_base_id, (string) $sidebar_id)) { $filtered[] = $widget_id; } else { $removed[] = $widget_id; } } $new_value[$sidebar_id] = array_values($filtered); } if (empty($removed)) { return $new_value; } if (!isset($new_value['wp_inactive_widgets']) || !is_array($new_value['wp_inactive_widgets'])) { $new_value['wp_inactive_widgets'] = []; } $assigned = []; foreach ($new_value as $widget_ids) { if (!is_array($widget_ids)) { continue; } foreach ($widget_ids as $widget_id) { if (is_string($widget_id) && $widget_id !== '') { $assigned[$widget_id] = true; } } } foreach (array_values(array_unique($removed)) as $widget_id) { if (!isset($assigned[$widget_id]) && !in_array($widget_id, $new_value['wp_inactive_widgets'], true)) { $new_value['wp_inactive_widgets'][] = $widget_id; } } return $new_value; } add_filter('pre_update_option_sidebars_widgets', 'aksrt_filter_widget_sidebar_assignments', 10, 2);