diff --git a/src/AKSRT/Core/WidgetAjax.php b/src/AKSRT/Core/WidgetAjax.php index 0acba307..febe7a93 100644 --- a/src/AKSRT/Core/WidgetAjax.php +++ b/src/AKSRT/Core/WidgetAjax.php @@ -125,10 +125,16 @@ class WidgetAjax { if (!class_exists('\AKSRT\Widgets\WidgetPaidPosts')) { return $this->fail(); } + $paginate = sanitize_key((string) ($request->get_param('paginate') ?? 'ajax')); + if (!in_array($paginate, ['none', 'ajax', 'number'], true)) { + $paginate = 'ajax'; + } $instance = [ - 'count' => max(1, min(20, (int) ($request->get_param('count') ?? 6))), - 'orderby' => sanitize_key((string) ($request->get_param('orderby') ?? 'date')), - 'paginate' => sanitize_key((string) ($request->get_param('paginate') ?? 'ajax')), + 'count' => max(1, min(20, (int) ($request->get_param('count') ?? 6))), + '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)), + 'paginate' => $paginate, ]; $page = max(1, (int) ($request->get_param('page') ?? $request->get_param('paged') ?? 1)); return $this->payload(\AKSRT\Widgets\WidgetPaidPosts::query_payload($instance, $page), $page); @@ -187,12 +193,16 @@ class WidgetAjax { if (!class_exists('\AKSRT\Widgets\HotPostsWidget')) { return $this->fail(); } + $paginate = sanitize_key((string) ($request->get_param('paginate') ?? 'ajax')); + if (!in_array($paginate, ['none', 'ajax', 'number'], true)) { + $paginate = 'ajax'; + } $instance = [ 'count' => max(1, min(20, (int) ($request->get_param('count') ?? 5))), 'order_by' => sanitize_key((string) ($request->get_param('order_by') ?? 'views')), 'days' => max(0, (int) ($request->get_param('days') ?? 30)), 'show_thumb' => $request->get_param('show_thumb') === null ? 1 : (int) $request->get_param('show_thumb'), - 'paginate' => sanitize_key((string) ($request->get_param('paginate') ?? 'ajax')), + 'paginate' => $paginate, ]; $page = max(1, (int) ($request->get_param('page') ?? 1)); return $this->payload(\AKSRT\Widgets\HotPostsWidget::query_payload($instance, $page), $page); @@ -260,7 +270,7 @@ class WidgetAjax { 'orderby' => sanitize_key((string) ($request->get_param('orderby') ?? 'views')), 'style' => $style, 'plate' => max(0, (int) ($request->get_param('plate') ?? $request->get_param('plate_id') ?? 0)), - 'paginate' => sanitize_key((string) ($request->get_param('paginate') ?? 'ajax')), + 'paginate' => in_array(sanitize_key((string) ($request->get_param('paginate') ?? 'ajax')), ['none', 'ajax', 'number'], true) ? sanitize_key((string) ($request->get_param('paginate') ?? 'ajax')) : 'ajax', ]; $page = max(1, (int) ($request->get_param('page') ?? 1)); return $this->payload(\AKSRT\Widgets\WidgetForumHotTopics::query_payload($instance, $page), $page); diff --git a/src/AKSRT/Widgets/HotPostsWidget.php b/src/AKSRT/Widgets/HotPostsWidget.php index 8d452688..1ab3eaff 100644 --- a/src/AKSRT/Widgets/HotPostsWidget.php +++ b/src/AKSRT/Widgets/HotPostsWidget.php @@ -172,19 +172,26 @@ class HotPostsWidget extends \WP_Widget { $max_pages = max(1, (int) $q->max_num_pages); $total = (int) $q->found_posts; $has_more = $page < $max_pages; + $base_qs = array_filter([ + 'count' => $count, + 'order_by' => sanitize_key((string) ($instance['order_by'] ?? 'views')), + 'days' => max(0, (int) ($instance['days'] ?? 30)), + 'show_thumb' => !empty($instance['show_thumb']) ? 1 : 0, + 'paginate' => $paginate, + ], static function ($v) { + return $v !== '' && $v !== null; + }); + $rest_base = add_query_arg($base_qs, rest_url('aksrt/v1/widgets/hot-posts')); $paginate_html = ''; if ($paginate === 'ajax' && $has_more) { - $next = add_query_arg([ - 'page' => $page + 1, - 'count' => $count, - 'order_by' => sanitize_key((string) ($instance['order_by'] ?? 'views')), - 'days' => max(0, (int) ($instance['days'] ?? 30)), - 'show_thumb' => !empty($instance['show_thumb']) ? 1 : 0, - 'paginate' => 'ajax', - ], rest_url('aksrt/v1/widgets/hot-posts')); + $next = add_query_arg(['page' => $page + 1], $rest_base); $paginate_html = function_exists('aksrt_get_ajax_next_paginate') ? aksrt_get_ajax_next_paginate($total, $page, $count, $next) : '
' . esc_html__('加载更多', 'aksrt') . '
'; + } elseif ($paginate === 'number' && $max_pages > 1) { + $paginate_html = function_exists('aksrt_get_ajax_number_paginate') + ? aksrt_get_ajax_number_paginate($total, $page, $count, $rest_base) + : '
'; } else { $paginate_html = '
'; } @@ -243,6 +250,7 @@ class HotPostsWidget extends \WP_Widget { @@ -257,7 +265,7 @@ class HotPostsWidget extends \WP_Widget { 'order_by' => in_array($new_instance['order_by'] ?? '', ['views', 'comments', 'likes', 'favorites', 'downloads'], true) ? $new_instance['order_by'] : 'views', 'days' => absint($new_instance['days'] ?? 30), 'show_thumb' => !empty($new_instance['show_thumb']) ? 1 : 0, - 'paginate' => sanitize_key((string) ($new_instance['paginate'] ?? 'ajax')) === 'none' ? 'none' : 'ajax', + 'paginate' => in_array(sanitize_key((string) ($new_instance['paginate'] ?? 'ajax')), ['none', 'ajax', 'number'], true) ? sanitize_key((string) ($new_instance['paginate'] ?? 'ajax')) : 'ajax', ]; } } diff --git a/src/AKSRT/Widgets/WidgetForumHotTopics.php b/src/AKSRT/Widgets/WidgetForumHotTopics.php index 80632deb..e921cf4d 100644 --- a/src/AKSRT/Widgets/WidgetForumHotTopics.php +++ b/src/AKSRT/Widgets/WidgetForumHotTopics.php @@ -141,20 +141,27 @@ class WidgetForumHotTopics extends \WP_Widget { $max_pages = max(1, (int) $q->max_num_pages); $total = (int) $q->found_posts; $has_more = $page < $max_pages; + $base_qs = array_filter([ + 'count' => $count, + 'period' => sanitize_key((string) ($instance['period'] ?? 'week')), + 'orderby' => sanitize_key((string) ($instance['orderby'] ?? 'views')), + 'style' => $style, + 'plate' => max(0, (int) ($instance['plate'] ?? 0)), + 'paginate' => $paginate, + ], static function ($v) { + return $v !== '' && $v !== null; + }); + $rest_base = add_query_arg($base_qs, rest_url('aksrt/v1/widgets/forum-topics')); $paginate_html = ''; if ($paginate === 'ajax' && $has_more) { - $next = add_query_arg([ - 'page' => $page + 1, - 'count' => $count, - 'period' => sanitize_key((string) ($instance['period'] ?? 'week')), - 'orderby' => sanitize_key((string) ($instance['orderby'] ?? 'views')), - 'style' => $style, - 'plate' => max(0, (int) ($instance['plate'] ?? 0)), - 'paginate' => 'ajax', - ], rest_url('aksrt/v1/widgets/forum-topics')); + $next = add_query_arg(['page' => $page + 1], $rest_base); $paginate_html = function_exists('aksrt_get_ajax_next_paginate') ? aksrt_get_ajax_next_paginate($total, $page, $count, $next) : '
' . esc_html__('加载更多', 'aksrt') . '
'; + } elseif ($paginate === 'number' && $max_pages > 1) { + $paginate_html = function_exists('aksrt_get_ajax_number_paginate') + ? aksrt_get_ajax_number_paginate($total, $page, $count, $rest_base) + : '
'; } else { $paginate_html = '
'; } @@ -231,6 +238,7 @@ class WidgetForumHotTopics extends \WP_Widget { @@ -254,7 +262,7 @@ class WidgetForumHotTopics extends \WP_Widget { 'orderby' => $orderby, 'style' => $style, 'plate' => max(0, (int) ($new_instance['plate'] ?? 0)), - 'paginate' => sanitize_key((string) ($new_instance['paginate'] ?? 'ajax')) === 'none' ? 'none' : 'ajax', + 'paginate' => in_array(sanitize_key((string) ($new_instance['paginate'] ?? 'ajax')), ['none', 'ajax', 'number'], true) ? sanitize_key((string) ($new_instance['paginate'] ?? 'ajax')) : 'ajax', ]; } } diff --git a/src/AKSRT/Widgets/WidgetForumTopicLists.php b/src/AKSRT/Widgets/WidgetForumTopicLists.php index d8fe5691..e66d993f 100644 --- a/src/AKSRT/Widgets/WidgetForumTopicLists.php +++ b/src/AKSRT/Widgets/WidgetForumTopicLists.php @@ -109,6 +109,9 @@ class WidgetForumTopicLists extends \WP_Widget { $page = max(1, $page); $style = sanitize_key((string) ($instance['style'] ?? 'mini')); $paginate = sanitize_key((string) ($instance['paginate'] ?? 'ajax')); + if (!in_array($paginate, ['none', 'ajax', 'number'], true)) { + $paginate = 'ajax'; + } $q = new \WP_Query(self::build_query_args($instance, $page)); $html = self::render_items_html($q, $style); if ($html === '' && $page === 1) { @@ -119,22 +122,26 @@ class WidgetForumTopicLists extends \WP_Widget { $max_pages = max(1, (int) $q->max_num_pages); $total = (int) $q->found_posts; $has_more = $page < $max_pages; + $base_qs = array_filter([ + 'count' => max(1, min(30, (int) ($instance['count'] ?? 8))), + 'orderby' => sanitize_key((string) ($instance['orderby'] ?? 'date')), + 'style' => $style, + 'plate_id' => (int) ($instance['plate_id'] ?? 0), + 'paginate' => $paginate, + ], static function ($v) { + return $v !== '' && $v !== null; + }); + $rest_base = add_query_arg($base_qs, rest_url('aksrt/v1/forum/frontend/widgets/topics')); $paginate_html = ''; if ($paginate === 'ajax' && $has_more) { - $next = add_query_arg( - array_filter([ - 'page' => $page + 1, - 'count' => max(1, min(30, (int) ($instance['count'] ?? 8))), - 'orderby' => sanitize_key((string) ($instance['orderby'] ?? 'date')), - 'style' => $style, - 'plate_id' => (int) ($instance['plate_id'] ?? 0), - 'paginate' => 'ajax', - ]), - rest_url('aksrt/v1/forum/frontend/widgets/topics') - ); + $next = add_query_arg(['page' => $page + 1], $rest_base); $paginate_html = function_exists('aksrt_get_ajax_next_paginate') ? aksrt_get_ajax_next_paginate($total, $page, max(1, (int) ($instance['count'] ?? 8)), $next) : '
' . esc_html__('加载更多', 'aksrt') . '
'; + } elseif ($paginate === 'number' && $max_pages > 1) { + $paginate_html = function_exists('aksrt_get_ajax_number_paginate') + ? aksrt_get_ajax_number_paginate($total, $page, max(1, (int) ($instance['count'] ?? 8)), $rest_base) + : '
'; } else { $paginate_html = '
'; } @@ -258,6 +265,7 @@ class WidgetForumTopicLists extends \WP_Widget { @@ -273,7 +281,7 @@ class WidgetForumTopicLists extends \WP_Widget { 'style' => sanitize_key((string) ($new_instance['style'] ?? 'mini')), 'plate_id' => max(0, (int) ($new_instance['plate_id'] ?? 0)), 'current_plate' => !empty($new_instance['current_plate']) ? 1 : 0, - 'paginate' => sanitize_key((string) ($new_instance['paginate'] ?? 'ajax')), + 'paginate' => in_array(sanitize_key((string) ($new_instance['paginate'] ?? 'ajax')), ['none', 'ajax', 'number'], true) ? sanitize_key((string) ($new_instance['paginate'] ?? 'ajax')) : 'ajax', ]; } } diff --git a/src/AKSRT/Widgets/WidgetPaidPosts.php b/src/AKSRT/Widgets/WidgetPaidPosts.php index 17b4ad7a..6a790ef3 100644 --- a/src/AKSRT/Widgets/WidgetPaidPosts.php +++ b/src/AKSRT/Widgets/WidgetPaidPosts.php @@ -137,17 +137,26 @@ class WidgetPaidPosts extends \WP_Widget { $max_pages = max(1, (int) $q->max_num_pages); $total = (int) $q->found_posts; $has_more = $page < $max_pages; + $base_qs = array_filter([ + 'count' => $count, + 'orderby' => sanitize_key((string) ($instance['orderby'] ?? 'date')), + 'cat' => max(0, (int) ($instance['cat'] ?? 0)), + 'limit_day' => max(0, (int) ($instance['limit_day'] ?? 0)), + 'paginate' => $paginate, + ], static function ($v) { + return $v !== '' && $v !== null; + }); + $rest_base = add_query_arg($base_qs, rest_url('aksrt/v1/widgets/paid-posts')); $paginate_html = ''; if ($paginate === 'ajax' && $has_more) { - $next = add_query_arg([ - 'page' => $page + 1, - 'count' => $count, - 'orderby' => sanitize_key((string) ($instance['orderby'] ?? 'date')), - 'paginate' => 'ajax', - ], rest_url('aksrt/v1/widgets/paid-posts')); + $next = add_query_arg(['page' => $page + 1], $rest_base); $paginate_html = function_exists('aksrt_get_ajax_next_paginate') ? aksrt_get_ajax_next_paginate($total, $page, $count, $next) : '
' . esc_html__('加载更多', 'aksrt') . '
'; + } elseif ($paginate === 'number' && $max_pages > 1) { + $paginate_html = function_exists('aksrt_get_ajax_number_paginate') + ? aksrt_get_ajax_number_paginate($total, $page, $count, $rest_base) + : '
'; } else { $paginate_html = '
'; } @@ -207,6 +216,7 @@ class WidgetPaidPosts extends \WP_Widget { @@ -235,7 +245,7 @@ class WidgetPaidPosts extends \WP_Widget { 'orderby' => $orderby, 'cat' => max(0, (int) ($new_instance['cat'] ?? 0)), 'limit_day' => max(0, (int) ($new_instance['limit_day'] ?? 0)), - 'paginate' => sanitize_key((string) ($new_instance['paginate'] ?? 'ajax')) === 'none' ? 'none' : 'ajax', + 'paginate' => in_array(sanitize_key((string) ($new_instance['paginate'] ?? 'ajax')), ['none', 'ajax', 'number'], true) ? sanitize_key((string) ($new_instance['paginate'] ?? 'ajax')) : 'ajax', ]; } } diff --git a/src/AKSRT/Widgets/WidgetProductTab.php b/src/AKSRT/Widgets/WidgetProductTab.php index 6e7232dd..4b8ed47f 100644 --- a/src/AKSRT/Widgets/WidgetProductTab.php +++ b/src/AKSRT/Widgets/WidgetProductTab.php @@ -167,7 +167,7 @@ class WidgetProductTab extends \WP_Widget { 'tabs' => sanitize_textarea_field((string) ($new_instance['tabs'] ?? '')), 'per_page' => max(1, min(20, (int) ($new_instance['per_page'] ?? 8))), 'style' => sanitize_key((string) ($new_instance['style'] ?? 'default')), - 'paginate' => sanitize_key((string) ($new_instance['paginate'] ?? 'ajax')), + 'paginate' => in_array(sanitize_key((string) ($new_instance['paginate'] ?? 'ajax')), ['none', 'ajax', 'number'], true) ? sanitize_key((string) ($new_instance['paginate'] ?? 'ajax')) : 'ajax', ]; } }