feat(widgets): simplify locations and paid sidebar

Remove deprecated widget locations and widgets, standardize sidebar labels, and render a compact paid-post purchase card in the article sidebar.
This commit is contained in:
kate522 committed 2026-08-14 01:49:50 +08:00
1 parent 51d2ab3aa7
commit bd7d3046a5
43 files changed
+294 -3581

No files matched your search

+24 -125
View File
@@ -19,11 +19,11 @@ function aksrt_unregister_default_widgets(): void {
unregister_widget('WP_Widget_Pages');
unregister_widget('WP_Widget_Search');
unregister_widget('WP_Widget_Calendar');
unregister_widget('WP_Nav_Menu_Widget');
}
add_action('widgets_init', 'aksrt_unregister_default_widgets', 1);
function aksrt_register_widgets() {
register_widget('\AKSRT\Widgets\AboutWidget');
register_widget('\AKSRT\Widgets\CategoriesWidget');
register_widget('\AKSRT\Widgets\TagCloudWidget');
register_widget('\AKSRT\Widgets\HotPostsWidget');
@@ -56,43 +56,28 @@ function aksrt_register_widgets() {
// 视频播放器
register_widget('\AKSRT\Widgets\WidgetVideoPlayer');
// 语言切换器
register_widget('\AKSRT\Widgets\WidgetLangSwitch');
// 一言轮播
register_widget('\AKSRT\Widgets\WidgetYiyan');
// 文章目录树(zibll posts_navs)
register_widget('\AKSRT\Widgets\WidgetPostsNavs');
// 幻灯片
register_widget('\AKSRT\Widgets\WidgetSlider');
// 幻灯片
register_widget('\AKSRT\Widgets\WidgetSlider');
// zibll more widgets batch
register_widget('\AKSRT\Widgets\WidgetPartnersScroll');
register_widget('\AKSRT\Widgets\WidgetIframe');
register_widget('\AKSRT\Widgets\WidgetComboInfo');
register_widget('\AKSRT\Widgets\WidgetTextTitle');
register_widget('\AKSRT\Widgets\WidgetUserLists');
register_widget('\AKSRT\Widgets\WidgetPricingPlans');
register_widget('\AKSRT\Widgets\WidgetFaq');
register_widget('\AKSRT\Widgets\WidgetStats');
register_widget('\AKSRT\Widgets\WidgetReviews');
register_widget('\AKSRT\Widgets\WidgetHighlights');
register_widget('\AKSRT\Widgets\WidgetFeatureIntro');
register_widget('\AKSRT\Widgets\WidgetTermCards');
register_widget('\AKSRT\Widgets\WidgetPaidPosts');
register_widget('\AKSRT\Widgets\WidgetPostPayBox');
register_widget('\AKSRT\Widgets\WidgetAuthorCard');
register_widget('\AKSRT\Widgets\WidgetOnelinePosts');
register_widget('\AKSRT\Widgets\WidgetTiltCases');
register_widget('\AKSRT\Widgets\WidgetMainPosts');
register_widget('\AKSRT\Widgets\WidgetTermAggregation');
register_widget('\AKSRT\Widgets\WidgetIconCoverCards');
register_widget('\AKSRT\Widgets\WidgetBookmarkLinks');
aksrt_maybe_repair_sidebar_blog_widgets();
// 其余通用小工具
register_widget('\AKSRT\Widgets\WidgetIframe');
register_widget('\AKSRT\Widgets\WidgetComboInfo');
register_widget('\AKSRT\Widgets\WidgetTextTitle');
register_widget('\AKSRT\Widgets\WidgetUserLists');
register_widget('\AKSRT\Widgets\WidgetFaq');
register_widget('\AKSRT\Widgets\WidgetHighlights');
register_widget('\AKSRT\Widgets\WidgetTermCards');
register_widget('\AKSRT\Widgets\WidgetPostPayBox');
register_widget('\AKSRT\Widgets\WidgetAuthorCard');
register_widget('\AKSRT\Widgets\WidgetOnelinePosts');
register_widget('\AKSRT\Widgets\WidgetTiltCases');
register_widget('\AKSRT\Widgets\WidgetMainPosts');
register_widget('\AKSRT\Widgets\WidgetTermAggregation');
register_widget('\AKSRT\Widgets\WidgetIconCoverCards');
register_widget('\AKSRT\Widgets\WidgetBookmarkLinks');
}
add_action('widgets_init', 'aksrt_register_widgets');
@@ -105,7 +90,6 @@ if (!function_exists('aksrt_widget_sidebar_area_ids')) {
function aksrt_widget_sidebar_area_ids(): array {
return [
'home_sidebar',
'sidebar-blog',
'sidebar-article',
'all_sidebar_top',
'all_sidebar_bottom',
@@ -192,7 +176,6 @@ if (!function_exists('aksrt_widget_allowed_sidebars')) {
*/
function aksrt_widget_allowed_sidebars(string $widget_base_id): array {
$sidebar_only = [
'aksrt_about',
'aksrt_categories',
'aksrt_tag_cloud',
'aksrt_hot_posts',
@@ -221,6 +204,10 @@ if (!function_exists('aksrt_widget_allowed_sidebars')) {
)));
}
if ($widget_base_id === 'aksrt_post_pay_box') {
return ['sidebar-article'];
}
return [];
}
}
@@ -280,7 +267,7 @@ if (!function_exists('aksrt_widget_render_location_help')) {
*/
function aksrt_widget_render_location_help(string $scope): void {
$messages = [
'sidebar' => __('仅限侧栏区域:首页侧栏、博客侧栏、文章侧栏、全站侧栏、分类/标签/搜索侧栏。', 'aksrt'),
'sidebar' => __('仅限侧栏区域:首页侧栏、文章页侧边栏、全站侧栏、分类/标签/搜索侧栏。', 'aksrt'),
'homepage' => __('仅限首页挂载区域:首页顶部/底部全宽、首页内容上方/下方。', 'aksrt'),
'hybrid' => __('支持侧栏、首页和归档页挂载区域。', 'aksrt'),
'archive' => __('仅限归档页挂载区域:分类页、标签页、搜索页的顶部/底部/侧栏。', 'aksrt'),
@@ -412,92 +399,6 @@ if (!function_exists('aksrt_filter_widget_sidebar_assignments')) {
}
add_filter('pre_update_option_sidebars_widgets', 'aksrt_filter_widget_sidebar_assignments', 10, 2);
/**
* Ensure widget instance config exists.
*/
function aksrt_ensure_widget_instance(string $option_name, int $number, array $defaults): void {
$instances = get_option($option_name, []);
if (!is_array($instances)) {
$instances = [];
}
if (!isset($instances['_multiwidget'])) {
$instances['_multiwidget'] = 1;
}
if (empty($instances[$number]) || !is_array($instances[$number])) {
$instances[$number] = $defaults;
update_option($option_name, $instances);
}
}
/**
* Repair the sidebar-blog structure and seed default sidebar widgets on first install.
*/
function aksrt_maybe_repair_sidebar_blog_widgets(): void {
$sidebars = get_option('sidebars_widgets', []);
$seeded = (bool) get_option('aksrt_sidebar_blog_seeded', false);
if (!is_array($sidebars)) {
$sidebars = [];
}
$current = $sidebars['sidebar-blog'] ?? null;
$needs_repair = false;
$normalized = [];
if (is_array($current)) {
foreach ($current as $item) {
if (is_array($item)) {
$needs_repair = true;
}
if (is_string($item) && $item !== '') {
$normalized[] = $item;
}
}
}
if ($needs_repair) {
$sidebars['sidebar-blog'] = array_values($normalized);
update_option('sidebars_widgets', $sidebars);
update_option('aksrt_sidebar_blog_seeded', true);
return;
}
if ($current !== null) {
if (!$seeded) {
update_option('aksrt_sidebar_blog_seeded', true);
}
return;
}
if ($seeded) {
return;
}
aksrt_ensure_widget_instance('widget_aksrt_about', 2, [
'title' => '',
]);
aksrt_ensure_widget_instance('widget_aksrt_categories', 2, [
'title' => __('分类目录', 'aksrt'),
'count' => 8,
]);
aksrt_ensure_widget_instance('widget_aksrt_tag_cloud', 2, [
'title' => __('标签云', 'aksrt'),
'count' => 15,
]);
$sidebars['sidebar-blog'] = [
'aksrt_about-2',
'aksrt_categories-2',
'aksrt_tag_cloud-2',
];
update_option('sidebars_widgets', $sidebars);
update_option('aksrt_sidebar_blog_seeded', true);
}
/**
* Register a block editor collection for AKSRT widgets.
*/
@@ -527,7 +428,6 @@ add_action('enqueue_block_editor_assets', function () {
*/
add_filter('block_type_metadata', function ($metadata) {
$aksrt_widgets = [
'aksrt_about',
'aksrt_categories',
'aksrt_tag_cloud',
];
@@ -544,7 +444,6 @@ add_filter('block_type_metadata', function ($metadata) {
*/
add_action('in_widget_form', function (WP_Widget $widget): void {
$map = [
'aksrt_about' => 'sidebar',
'aksrt_categories' => 'sidebar',
'aksrt_tag_cloud' => 'sidebar',
'aksrt_hot_posts' => 'sidebar',