From 7a476a220d2691af61b2f2b6121a827a13d8899e Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 21 Jul 2026 10:55:32 +0800 Subject: [PATCH] feat(widgets): product lazy fallback and admin empty states Lazyload product list fallback thumbs; surface widget_null admin empties for notice/stats/faq/slider; stats cards gain data-aksrt-animate. --- src/AKSRT/Widgets/NoticeWidget.php | 9 ++++++++- src/AKSRT/Widgets/WidgetFaq.php | 5 +++-- src/AKSRT/Widgets/WidgetProductList.php | 5 +++-- src/AKSRT/Widgets/WidgetSlider.php | 5 +++-- src/AKSRT/Widgets/WidgetStats.php | 11 +++++++++-- 5 files changed, 26 insertions(+), 9 deletions(-) diff --git a/src/AKSRT/Widgets/NoticeWidget.php b/src/AKSRT/Widgets/NoticeWidget.php index f6c8eb1a..b6490519 100644 --- a/src/AKSRT/Widgets/NoticeWidget.php +++ b/src/AKSRT/Widgets/NoticeWidget.php @@ -20,7 +20,14 @@ class NoticeWidget extends \WP_Widget { public function widget($args, $instance): void { $items = $this->normalize_items($instance); - if (!$items) { +if (!$items) { + if (current_user_can('manage_options')) { + echo $args['before_widget']; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped + echo function_exists('aksrt_get_widget_null') + ? aksrt_get_widget_null(__('请添加至少一条公告', 'aksrt')) // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped + : '

' . esc_html__('请添加至少一条公告', 'aksrt') . '

'; + echo $args['after_widget']; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped + } return; } diff --git a/src/AKSRT/Widgets/WidgetFaq.php b/src/AKSRT/Widgets/WidgetFaq.php index ebf98dc9..002ba438 100644 --- a/src/AKSRT/Widgets/WidgetFaq.php +++ b/src/AKSRT/Widgets/WidgetFaq.php @@ -29,8 +29,9 @@ class WidgetFaq extends \WP_Widget { if (!$faqs) { if (current_user_can('manage_options')) { echo $args['before_widget']; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped - echo '
' . esc_html__('常见问题解答:', 'aksrt') . '' . - esc_html__('请添加至少一条问题', 'aksrt') . '
'; + echo function_exists('aksrt_get_widget_null') + ? aksrt_get_widget_null(__('请添加至少一条问题', 'aksrt')) // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped + : '
' . esc_html__('常见问题解答:', 'aksrt') . '' . esc_html__('请添加至少一条问题', 'aksrt') . '
'; echo $args['after_widget']; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped } return; diff --git a/src/AKSRT/Widgets/WidgetProductList.php b/src/AKSRT/Widgets/WidgetProductList.php index e6847945..10cceac7 100644 --- a/src/AKSRT/Widgets/WidgetProductList.php +++ b/src/AKSRT/Widgets/WidgetProductList.php @@ -110,13 +110,14 @@ class WidgetProductList extends \WP_Widget { 'show_sales' => true, ]); } else { - // Fallback mini card. + // Fallback mini card (lazy thumbs). $price = (float) ($card['price'] ?? 0); $image = (string) ($card['image'] ?? ''); + $ph = get_template_directory_uri() . '/assets/img/placeholder.svg'; echo '
'; if ($image !== '') { echo ''; - echo '' . esc_attr(get_the_title($pid)) . ''; + echo '' . esc_attr(get_the_title($pid)) . ''; echo ''; } echo '
'; diff --git a/src/AKSRT/Widgets/WidgetSlider.php b/src/AKSRT/Widgets/WidgetSlider.php index 4dc35535..52b8f9bb 100644 --- a/src/AKSRT/Widgets/WidgetSlider.php +++ b/src/AKSRT/Widgets/WidgetSlider.php @@ -27,8 +27,9 @@ class WidgetSlider extends \WP_Widget { if (!$slides) { if (current_user_can('manage_options')) { echo $args['before_widget']; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped - echo '
' . esc_html__('幻灯片模块:', 'aksrt') . '' . - esc_html__('当前配置下没有可显示的内容,请正确配置或移出该模块', 'aksrt') . '
'; + echo function_exists('aksrt_get_widget_null') + ? aksrt_get_widget_null(__('当前配置下没有可显示的内容', 'aksrt')) // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped + : '
' . esc_html__('幻灯片模块:', 'aksrt') . '' . esc_html__('当前配置下没有可显示的内容,请正确配置或移出该模块', 'aksrt') . '
'; echo $args['after_widget']; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped } return; diff --git a/src/AKSRT/Widgets/WidgetStats.php b/src/AKSRT/Widgets/WidgetStats.php index 9eded52e..387f56ff 100644 --- a/src/AKSRT/Widgets/WidgetStats.php +++ b/src/AKSRT/Widgets/WidgetStats.php @@ -24,7 +24,14 @@ class WidgetStats extends \WP_Widget { public function widget($args, $instance): void { $stats = $this->normalize_stats($instance['stats'] ?? []); - if (!$stats) { +if (!$stats) { + if (current_user_can('manage_options')) { + echo $args['before_widget']; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped + echo function_exists('aksrt_get_widget_null') + ? aksrt_get_widget_null(__('请配置至少一项统计数据', 'aksrt')) // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped + : '

' . esc_html__('请配置至少一项统计数据', 'aksrt') . '

'; + echo $args['after_widget']; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped + } return; } $cols = max(1, min(4, (int) ($instance['columns'] ?? 4))); @@ -59,7 +66,7 @@ class WidgetStats extends \WP_Widget { $color = $palette[$i % count($palette)]; } $i++; - echo '
'; + echo '
'; if ($s['icon'] !== '') { echo '
'; }