diff --git a/assets/css/frontend/widget-batch5.css b/assets/css/frontend/widget-batch5.css
index 930abbf3..977feeca 100644
--- a/assets/css/frontend/widget-batch5.css
+++ b/assets/css/frontend/widget-batch5.css
@@ -2533,3 +2533,22 @@ a.main-color > .icon-cover-card:hover,
.aksrt-plate-info .count-mates .em14 { font-weight: 700; line-height: 1.2; }
.aksrt-fi[data-aksrt-feature-intro] .aksrt-fi__panel { display: none; }
.aksrt-fi[data-aksrt-feature-intro] .aksrt-fi__panel.is-active { display: block; }
+
+
+/* batch43-45 residual */
+.aksrt-product-widget__item--mini {
+ gap: 10px; padding: 8px 0;
+ border-bottom: 1px solid var(--color-line, rgba(0,0,0,.06));
+}
+.aksrt-product-widget__item--mini:last-child { border-bottom: 0; }
+.aksrt-product-widget__thumb.mini {
+ flex: 0 0 56px; width: 56px; height: 56px; border-radius: 8px; overflow: hidden;
+ background: var(--surface-2, #f3f4f6); display: block;
+}
+.aksrt-product-widget__thumb.mini img { width: 100%; height: 100%; object-fit: cover; display: block; }
+.aksrt-paid-posts.style-card { display: grid; grid-template-columns: repeat(auto-fill, minmax(160px, 1fr)); gap: 12px; }
+.aksrt-paid-posts.style-list .aksrt-paid-posts__item { margin-bottom: 10px; }
+.aksrt-paid-posts__price.badge {
+ 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;
+}
diff --git a/src/AKSRT/Core/WidgetAjax.php b/src/AKSRT/Core/WidgetAjax.php
index febe7a93..1a3cdbf8 100644
--- a/src/AKSRT/Core/WidgetAjax.php
+++ b/src/AKSRT/Core/WidgetAjax.php
@@ -134,6 +134,7 @@ class WidgetAjax {
'orderby' => sanitize_key((string) ($request->get_param('orderby') ?? 'date')),
'cat' => max(0, (int) ($request->get_param('cat') ?? 0)),
'limit_day' => max(0, (int) ($request->get_param('limit_day') ?? 0)),
+ 'style' => sanitize_key((string) ($request->get_param('style') ?? 'mini')),
'paginate' => $paginate,
];
$page = max(1, (int) ($request->get_param('page') ?? $request->get_param('paged') ?? 1));
diff --git a/src/AKSRT/Widgets/WidgetPaidPosts.php b/src/AKSRT/Widgets/WidgetPaidPosts.php
index 6a790ef3..86e3c508 100644
--- a/src/AKSRT/Widgets/WidgetPaidPosts.php
+++ b/src/AKSRT/Widgets/WidgetPaidPosts.php
@@ -72,7 +72,7 @@ class WidgetPaidPosts extends \WP_Widget {
return $query;
}
- public static function render_items_html(\WP_Query $q): string {
+ public static function render_items_html(\WP_Query $q, string $style = 'mini'): string {
if (!$q->have_posts()) {
return '';
}
@@ -91,17 +91,18 @@ class WidgetPaidPosts extends \WP_Widget {
} else {
$badge = __('付费', 'aksrt');
}
+ $mode = in_array($style, ['list', 'card', 'mini'], true) ? $style : 'mini';
if (function_exists('aksrt_render_post')) {
$item = aksrt_render_post([
- 'mode' => 'mini',
+ 'mode' => $mode,
'context' => 'widget',
'show_thumb' => true,
'show_meta' => true,
- 'show_excerpt' => false,
- 'extra_class' => 'ajax-item aksrt-paid-posts__mini',
+ 'show_excerpt' => $mode === 'list',
+ 'extra_class' => 'ajax-item aksrt-paid-posts__' . $mode,
]);
if ($item !== '') {
- echo '
';
+ echo '
';
echo $item; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
echo '' . esc_html($badge) . '';
echo '
';
@@ -126,9 +127,13 @@ class WidgetPaidPosts extends \WP_Widget {
$paginate = sanitize_key((string) ($instance['paginate'] ?? 'ajax'));
$count = max(1, min(20, (int) ($instance['count'] ?? 6)));
$q = new \WP_Query(self::build_query_args($instance, $page));
- $items = self::render_items_html($q);
+ $style = sanitize_key((string) ($instance['style'] ?? 'mini'));
+ if (!in_array($style, ['mini', 'list', 'card'], true)) {
+ $style = 'mini';
+ }
+ $items = self::render_items_html($q, $style);
$wrap_tag = (strpos($items, 'posts-mini') !== false || strpos($items, 'aksrt-paid-posts__mini') !== false) ? 'div' : 'ul';
- $html = $items !== '' ? '<' . $wrap_tag . ' class="aksrt-paid-posts">' . $items . '' . $wrap_tag . '>' : '';
+ $html = $items !== '' ? '<' . $wrap_tag . ' class="aksrt-paid-posts style-' . esc_attr($style) . '">' . $items . '' . $wrap_tag . '>' : '';
if ($html === '' && $page === 1) {
$html = function_exists('aksrt_get_ajax_null')
? aksrt_get_ajax_null(__('暂无付费内容', 'aksrt'))
@@ -142,6 +147,7 @@ class WidgetPaidPosts extends \WP_Widget {
'orderby' => sanitize_key((string) ($instance['orderby'] ?? 'date')),
'cat' => max(0, (int) ($instance['cat'] ?? 0)),
'limit_day' => max(0, (int) ($instance['limit_day'] ?? 0)),
+ 'style' => $style,
'paginate' => $paginate,
], static function ($v) {
return $v !== '' && $v !== null;
@@ -203,6 +209,15 @@ class WidgetPaidPosts extends \WP_Widget {
+
+
+