From 93833ad381bc5b49af53c020dca817f4a4e8101c Mon Sep 17 00:00:00 2001
From: unknown
Date: Tue, 21 Jul 2026 13:55:16 +0800
Subject: [PATCH 1/2] feat(widgets): zibll-like in_affix sticky option across
side modules
Add sidebar affix (data-affix) to ranking, user/author cards, main/hot/
paid/forum lists, comments, tag cloud, categories and text title with
shared sticky CSS.
---
assets/css/frontend/widget-batch5.css | 13 +++++++++++++
src/AKSRT/Widgets/CategoriesWidget.php | 11 +++++++++++
src/AKSRT/Widgets/HotPostsWidget.php | 8 ++++++--
src/AKSRT/Widgets/RecentCommentsWidget.php | 10 ++++++++++
src/AKSRT/Widgets/TagCloudWidget.php | 10 +++++++++-
src/AKSRT/Widgets/WidgetAuthorCard.php | 7 ++++++-
src/AKSRT/Widgets/WidgetForumHotTopics.php | 7 ++++++-
src/AKSRT/Widgets/WidgetForumRecentTopics.php | 8 +++++++-
src/AKSRT/Widgets/WidgetMainPosts.php | 10 ++++++++--
src/AKSRT/Widgets/WidgetPaidPosts.php | 7 ++++++-
src/AKSRT/Widgets/WidgetTextTitle.php | 14 +++++++++++++-
src/AKSRT/Widgets/WidgetUserCard.php | 11 ++++++++++-
src/AKSRT/Widgets/WidgetUserRanking.php | 11 ++++++++++-
13 files changed, 115 insertions(+), 12 deletions(-)
diff --git a/assets/css/frontend/widget-batch5.css b/assets/css/frontend/widget-batch5.css
index 977feeca..b5a663a4 100644
--- a/assets/css/frontend/widget-batch5.css
+++ b/assets/css/frontend/widget-batch5.css
@@ -2552,3 +2552,16 @@ a.main-color > .icon-cover-card:hover,
display: inline-block; margin-top: 4px; padding: 1px 6px; border-radius: 4px;
background: rgba(240,68,148,.1); color: var(--theme-color, #f04494); font-size: 12px;
}
+
+
+/* batch46-48 residual */
+.widget .is-affix[data-affix="true"],
+.ajaxpager.is-affix[data-affix="true"],
+.zib-widget.is-affix[data-affix="true"],
+.aksrt-author-card.is-affix[data-affix="true"],
+.aksrt-text-title.is-affix[data-affix="true"] {
+ position: sticky;
+ top: 72px;
+ z-index: 2;
+}
+.avatar-img.link-img img.aksrt-lazy { object-fit: cover; }
diff --git a/src/AKSRT/Widgets/CategoriesWidget.php b/src/AKSRT/Widgets/CategoriesWidget.php
index d034cc8d..bf0904d5 100644
--- a/src/AKSRT/Widgets/CategoriesWidget.php
+++ b/src/AKSRT/Widgets/CategoriesWidget.php
@@ -176,7 +176,14 @@ class CategoriesWidget extends \WP_Widget {
if ($title !== '') {
echo $args['before_title'] . esc_html($title) . $args['after_title']; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
}
+ $in_affix = !empty($instance['in_affix']);
+ if ($in_affix) {
+ echo '';
+ }
echo self::render_html($instance); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
+ if ($in_affix) {
+ echo '
';
+ }
echo $args['after_widget']; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
}
@@ -231,6 +238,9 @@ class CategoriesWidget extends \WP_Widget {
+
+
+
!empty($new_instance['show_thumb']) ? 1 : 0,
'hide_empty' => !empty($new_instance['hide_empty']) ? 1 : 0,
'hierarchical' => !empty($new_instance['hierarchical']) ? 1 : 0,
+ 'in_affix' => !empty($new_instance['in_affix']) ? 1 : 0,
];
}
}
diff --git a/src/AKSRT/Widgets/HotPostsWidget.php b/src/AKSRT/Widgets/HotPostsWidget.php
index 1ab3eaff..0a5b5336 100644
--- a/src/AKSRT/Widgets/HotPostsWidget.php
+++ b/src/AKSRT/Widgets/HotPostsWidget.php
@@ -204,10 +204,12 @@ class HotPostsWidget extends \WP_Widget {
if ($title) {
echo $args['before_title'] . esc_html($title) . $args['after_title']; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
}
+ $in_affix = !empty($instance['in_affix']);
$instance['paginate'] = sanitize_key((string) ($instance['paginate'] ?? 'ajax'));
$payload = self::query_payload($instance, 1);
$rest = rest_url('aksrt/v1/widgets/hot-posts');
- echo '