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)
: '
';
+ } 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)
: '';
+ } 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)
: '';
+ } 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)
: '';
+ } 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',
];
}
}