Merge pull request 'Worktree ux depth batch28 30' (#238) from worktree-ux-depth-batch28-30 into main
Reviewed-on: CYL/wordpress-theme-aksrt#238
This commit is contained in:
commit
47bac29ddc
11 files changed
+107
-22
No files matched your search
@@ -2414,3 +2414,15 @@ a.main-color > .icon-cover-card:hover,
|
|||||||
}
|
}
|
||||||
.aksrt-forum-widget__rank-row badge.img-badge { position: static; flex: 0 0 auto; margin-top: 4px; }
|
.aksrt-forum-widget__rank-row badge.img-badge { position: static; flex: 0 0 auto; margin-top: 4px; }
|
||||||
.aksrt-stats__item[data-aksrt-animate] { will-change: transform, opacity; }
|
.aksrt-stats__item[data-aksrt-animate] { will-change: transform, opacity; }
|
||||||
|
|
||||||
|
|
||||||
|
/* batch28-30 residual */
|
||||||
|
.aksrt-ftab.widget-tab-posts .aksrt-ftab__nav { display: flex; flex-wrap: wrap; gap: 8px; list-style: none; margin: 0 0 12px; padding: 0; }
|
||||||
|
.aksrt-ftab__btn.widget-tab-posts__tab {
|
||||||
|
border: 0; background: var(--surface-2, #f3f4f6); color: inherit;
|
||||||
|
border-radius: 999px; padding: 6px 12px; cursor: pointer; font-size: 13px;
|
||||||
|
}
|
||||||
|
.aksrt-ftab__btn.is-active { background: var(--theme-color, #f04494); color: #fff; }
|
||||||
|
.aksrt-ftab__panel[hidden] { display: none !important; }
|
||||||
|
.aksrt-ftab__panel.is-ajax-loading { opacity: .65; pointer-events: none; }
|
||||||
|
.aksrt-reviews__avatar.aksrt-lazy { object-fit: cover; border-radius: 50%; }
|
||||||
@@ -204,10 +204,16 @@ class WidgetAjax {
|
|||||||
if (!class_exists('\AKSRT\Widgets\WidgetForumHotTopics')) {
|
if (!class_exists('\AKSRT\Widgets\WidgetForumHotTopics')) {
|
||||||
return $this->fail();
|
return $this->fail();
|
||||||
}
|
}
|
||||||
|
$style = sanitize_key((string) ($request->get_param('style') ?? 'mini'));
|
||||||
|
if (!in_array($style, ['mini', 'rank'], true)) {
|
||||||
|
$style = 'mini';
|
||||||
|
}
|
||||||
$instance = [
|
$instance = [
|
||||||
'count' => max(1, min(20, (int) ($request->get_param('count') ?? 5))),
|
'count' => max(1, min(20, (int) ($request->get_param('count') ?? 5))),
|
||||||
'period' => sanitize_key((string) ($request->get_param('period') ?? 'week')),
|
'period' => sanitize_key((string) ($request->get_param('period') ?? 'week')),
|
||||||
'orderby' => sanitize_key((string) ($request->get_param('orderby') ?? 'views')),
|
'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' => sanitize_key((string) ($request->get_param('paginate') ?? 'ajax')),
|
||||||
];
|
];
|
||||||
$page = max(1, (int) ($request->get_param('page') ?? 1));
|
$page = max(1, (int) ($request->get_param('page') ?? 1));
|
||||||
|
|||||||
@@ -61,12 +61,12 @@ class AboutWidget extends \WP_Widget {
|
|||||||
?>
|
?>
|
||||||
<div class="aksrt-user-card">
|
<div class="aksrt-user-card">
|
||||||
<div class="aksrt-user-card__cover" style="padding-bottom: 50%;">
|
<div class="aksrt-user-card__cover" style="padding-bottom: 50%;">
|
||||||
<img class="aksrt-user-card__cover-img" src="<?php echo esc_url($cover); ?>" alt=""<?php echo function_exists('aksrt_lazy_loading') ? aksrt_lazy_loading('widget') : ' loading="lazy"'; ?>>
|
<img class="aksrt-user-card__cover-img aksrt-lazy lazyload" data-src="<?php echo esc_url($cover); ?>" src="<?php echo esc_url(get_template_directory_uri() . '/assets/img/placeholder.svg'); ?>" alt="" loading="lazy">
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="aksrt-user-card__content">
|
<div class="aksrt-user-card__content">
|
||||||
<div class="aksrt-user-card__avatar">
|
<div class="aksrt-user-card__avatar">
|
||||||
<img src="<?php echo esc_url($avatar); ?>" alt="" width="80" height="80"<?php echo function_exists('aksrt_lazy_loading') ? aksrt_lazy_loading('avatar') : ' loading="lazy"'; ?>>
|
<img class="aksrt-lazy lazyload" data-src="<?php echo esc_url($avatar); ?>" src="<?php echo esc_url(get_template_directory_uri() . '/assets/img/placeholder.svg'); ?>" alt="" width="80" height="80" loading="lazy">
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="aksrt-user-card__info">
|
<div class="aksrt-user-card__info">
|
||||||
@@ -111,13 +111,13 @@ class AboutWidget extends \WP_Widget {
|
|||||||
<div class="aksrt-user-card">
|
<div class="aksrt-user-card">
|
||||||
<div class="aksrt-user-card__cover" style="padding-bottom: 50%;">
|
<div class="aksrt-user-card__cover" style="padding-bottom: 50%;">
|
||||||
<?php if ($cover) : ?>
|
<?php if ($cover) : ?>
|
||||||
<img class="aksrt-user-card__cover-img" src="<?php echo esc_url($cover); ?>" alt=""<?php echo function_exists('aksrt_lazy_loading') ? aksrt_lazy_loading('widget') : ' loading="lazy"'; ?>>
|
<img class="aksrt-user-card__cover-img aksrt-lazy lazyload" data-src="<?php echo esc_url($cover); ?>" src="<?php echo esc_url(get_template_directory_uri() . '/assets/img/placeholder.svg'); ?>" alt="" loading="lazy">
|
||||||
<?php endif; ?>
|
<?php endif; ?>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="aksrt-user-card__content">
|
<div class="aksrt-user-card__content">
|
||||||
<div class="aksrt-user-card__avatar">
|
<div class="aksrt-user-card__avatar">
|
||||||
<img src="<?php echo esc_url($avatar); ?>" alt="" width="80" height="80"<?php echo function_exists('aksrt_lazy_loading') ? aksrt_lazy_loading('avatar') : ' loading="lazy"'; ?>>
|
<img class="aksrt-lazy lazyload" data-src="<?php echo esc_url($avatar); ?>" src="<?php echo esc_url(get_template_directory_uri() . '/assets/img/placeholder.svg'); ?>" alt="" width="80" height="80" loading="lazy">
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="aksrt-user-card__info">
|
<div class="aksrt-user-card__info">
|
||||||
|
|||||||
@@ -40,6 +40,13 @@ class WidgetAnnouncement extends \WP_Widget {
|
|||||||
|
|
||||||
$lines = array_values(array_filter(array_map('trim', explode("\n", $items))));
|
$lines = array_values(array_filter(array_map('trim', explode("\n", $items))));
|
||||||
if (!$lines) {
|
if (!$lines) {
|
||||||
|
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
|
||||||
|
: '<p class="widget-empty">' . esc_html__('请添加至少一条公告', 'aksrt') . '</p>';
|
||||||
|
echo $args['after_widget']; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -97,7 +97,8 @@ class WidgetAuthorCard extends \WP_Widget {
|
|||||||
}
|
}
|
||||||
echo '<div class="aksrt-author-card__body card-content">';
|
echo '<div class="aksrt-author-card__body card-content">';
|
||||||
echo '<div class="user-content">';
|
echo '<div class="user-content">';
|
||||||
echo '<a class="aksrt-author-card__avatar user-avatar" href="' . esc_url($home) . '"><img class="avatar" src="' . esc_url($avatar) . '" alt="" width="72" height="72" loading="lazy" /></a>';
|
$ph = get_template_directory_uri() . '/assets/img/placeholder.svg';
|
||||||
|
echo '<a class="aksrt-author-card__avatar user-avatar" href="' . esc_url($home) . '"><img class="avatar aksrt-lazy lazyload" data-src="' . esc_url($avatar) . '" src="' . esc_url($ph) . '" alt="" width="72" height="72" loading="lazy" /></a>';
|
||||||
echo '<div class="aksrt-author-card__name user-name">' . $name_html . '</div>'; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
|
echo '<div class="aksrt-author-card__name user-name">' . $name_html . '</div>'; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
|
||||||
if ($bio !== '') {
|
if ($bio !== '') {
|
||||||
echo '<div class="aksrt-author-card__bio user-desc muted-2-color em09">' . esc_html(wp_trim_words($bio, 28)) . '</div>';
|
echo '<div class="aksrt-author-card__bio user-desc muted-2-color em09">' . esc_html(wp_trim_words($bio, 28)) . '</div>';
|
||||||
|
|||||||
@@ -140,7 +140,10 @@ class WidgetForumBoardList extends \WP_Widget {
|
|||||||
|
|
||||||
echo $args['before_widget']; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
|
echo $args['before_widget']; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
|
||||||
echo $args['before_title'] . esc_html($title) . $args['after_title']; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
|
echo $args['before_title'] . esc_html($title) . $args['after_title']; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
|
||||||
|
$rest = rest_url('aksrt/v1/widgets/forum-boards');
|
||||||
|
echo '<div class="ajaxpager" data-aksrt-ajaxpager data-aksrt-ajax-url="' . esc_url($rest) . '">';
|
||||||
echo $html; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
|
echo $html; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
|
||||||
|
echo '</div>';
|
||||||
echo $args['after_widget']; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
|
echo $args['after_widget']; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* Multi-tab forum topic lists (zibll zib_bbs_widget_ui_tab_posts lite + lazy REST).
|
* Multi-tab forum topic lists (zibll zib_bbs_widget_ui_tab_posts + shared mini rows).
|
||||||
*
|
*
|
||||||
* @package AKSRT
|
* @package AKSRT
|
||||||
*/
|
*/
|
||||||
@@ -16,7 +16,7 @@ class WidgetForumTabTopics extends \WP_Widget {
|
|||||||
'aksrt_forum_tab_topics',
|
'aksrt_forum_tab_topics',
|
||||||
esc_html__('论坛 - 多栏目帖子', 'aksrt'),
|
esc_html__('论坛 - 多栏目帖子', 'aksrt'),
|
||||||
[
|
[
|
||||||
'description' => esc_html__('热门/最新/精华等栏目切换的帖子列表(懒加载)。', 'aksrt'),
|
'description' => esc_html__('热门/最新/精华等栏目切换的帖子列表(共享迷你行 + 懒加载)。', 'aksrt'),
|
||||||
'classname' => 'widget_aksrt_forum_tab_topics',
|
'classname' => 'widget_aksrt_forum_tab_topics',
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
@@ -35,8 +35,14 @@ class WidgetForumTabTopics extends \WP_Widget {
|
|||||||
];
|
];
|
||||||
}
|
}
|
||||||
$count = max(1, min(20, (int) ($instance['count'] ?? 6)));
|
$count = max(1, min(20, (int) ($instance['count'] ?? 6)));
|
||||||
$uid = 'aksrt-ftab-' . esc_attr($this->id);
|
$style = sanitize_key((string) ($instance['style'] ?? 'mini'));
|
||||||
$rest = rest_url('aksrt/v1/forum/frontend/widgets/topics');
|
if (!in_array($style, ['mini', 'rank'], true)) {
|
||||||
|
$style = 'mini';
|
||||||
|
}
|
||||||
|
$plate = max(0, (int) ($instance['plate'] ?? 0));
|
||||||
|
$uid = 'aksrt-ftab-' . esc_attr($this->id);
|
||||||
|
// Prefer WidgetAjax forum-topics (HotTopics payload with style/plate).
|
||||||
|
$rest = rest_url('aksrt/v1/widgets/forum-topics');
|
||||||
|
|
||||||
echo $args['before_widget']; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
|
echo $args['before_widget']; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
|
||||||
$title = apply_filters('widget_title', (string) ($instance['title'] ?? ''), $instance, $this->id_base);
|
$title = apply_filters('widget_title', (string) ($instance['title'] ?? ''), $instance, $this->id_base);
|
||||||
@@ -44,23 +50,25 @@ class WidgetForumTabTopics extends \WP_Widget {
|
|||||||
echo $args['before_title'] . esc_html($title) . $args['after_title']; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
|
echo $args['before_title'] . esc_html($title) . $args['after_title']; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
|
||||||
}
|
}
|
||||||
|
|
||||||
echo '<div class="aksrt-ftab" id="' . $uid . '" data-rest="' . esc_url($rest) . '" data-count="' . esc_attr((string) $count) . '">';
|
echo '<div class="aksrt-ftab widget-tab-posts" id="' . $uid . '" data-aksrt-tabs="1" data-rest="' . esc_url($rest) . '" data-count="' . esc_attr((string) $count) . '" data-style="' . esc_attr($style) . '" data-plate="' . esc_attr((string) $plate) . '">';
|
||||||
echo '<ul class="aksrt-ftab__nav" role="tablist">';
|
echo '<ul class="aksrt-ftab__nav widget-tab-posts__nav" role="tablist">';
|
||||||
foreach ($tabs as $i => $tab) {
|
foreach ($tabs as $i => $tab) {
|
||||||
$cls = $i === 0 ? ' is-active' : '';
|
$cls = $i === 0 ? ' is-active' : '';
|
||||||
echo '<li><button type="button" class="aksrt-ftab__btn' . esc_attr($cls) . '" data-index="' . (int) $i . '" data-orderby="' . esc_attr($tab['orderby']) . '">' . esc_html($tab['title']) . '</button></li>';
|
echo '<li role="presentation"><button type="button" role="tab" class="aksrt-ftab__btn widget-tab-posts__tab' . esc_attr($cls) . '" data-index="' . (int) $i . '" data-orderby="' . esc_attr($tab['orderby']) . '" aria-selected="' . ($i === 0 ? 'true' : 'false') . '">' . esc_html($tab['title']) . '</button></li>';
|
||||||
}
|
}
|
||||||
echo '</ul>';
|
echo '</ul>';
|
||||||
|
|
||||||
foreach ($tabs as $i => $tab) {
|
foreach ($tabs as $i => $tab) {
|
||||||
$cls = $i === 0 ? ' is-active' : '';
|
$cls = $i === 0 ? ' is-active' : '';
|
||||||
$loaded = $i === 0 ? '1' : '0';
|
$loaded = $i === 0 ? '1' : '0';
|
||||||
echo '<div class="aksrt-ftab__panel' . esc_attr($cls) . '" data-index="' . (int) $i . '" data-loaded="' . esc_attr($loaded) . '">';
|
echo '<div class="aksrt-ftab__panel widget-tab-posts__panel' . esc_attr($cls) . '" data-index="' . (int) $i . '" data-loaded="' . esc_attr($loaded) . '"' . ($i === 0 ? '' : ' hidden') . ' role="tabpanel">';
|
||||||
if ($i === 0) {
|
if ($i === 0) {
|
||||||
$payload = WidgetForumTopicLists::query_payload([
|
$payload = WidgetForumHotTopics::query_payload([
|
||||||
'count' => $count,
|
'count' => $count,
|
||||||
'orderby' => $tab['orderby'],
|
'orderby' => $tab['orderby'],
|
||||||
'style' => 'mini',
|
'period' => 'all',
|
||||||
|
'style' => $style,
|
||||||
|
'plate' => $plate,
|
||||||
'paginate' => 'none',
|
'paginate' => 'none',
|
||||||
], 1);
|
], 1);
|
||||||
echo $payload['html']; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
|
echo $payload['html']; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
|
||||||
@@ -77,11 +85,13 @@ class WidgetForumTabTopics extends \WP_Widget {
|
|||||||
if(!root||root._aksrtFtab)return; root._aksrtFtab=1;
|
if(!root||root._aksrtFtab)return; root._aksrtFtab=1;
|
||||||
var rest=root.getAttribute('data-rest')||'';
|
var rest=root.getAttribute('data-rest')||'';
|
||||||
var count=root.getAttribute('data-count')||'6';
|
var count=root.getAttribute('data-count')||'6';
|
||||||
|
var style=root.getAttribute('data-style')||'mini';
|
||||||
|
var plate=root.getAttribute('data-plate')||'0';
|
||||||
var btns=[].slice.call(root.querySelectorAll('.aksrt-ftab__btn'));
|
var btns=[].slice.call(root.querySelectorAll('.aksrt-ftab__btn'));
|
||||||
var panels=[].slice.call(root.querySelectorAll('.aksrt-ftab__panel'));
|
var panels=[].slice.call(root.querySelectorAll('.aksrt-ftab__panel'));
|
||||||
function load(panel, orderby){
|
function load(panel, orderby){
|
||||||
if(!panel||panel.getAttribute('data-loaded')==='1'||!rest)return;
|
if(!panel||panel.getAttribute('data-loaded')==='1'||!rest)return;
|
||||||
var qs=new URLSearchParams({page:'1',count:count,orderby:orderby||'date',style:'mini',paginate:'none'});
|
var qs=new URLSearchParams({page:'1',count:count,orderby:orderby||'date',style:style,plate:plate,period:'all',paginate:'none'});
|
||||||
var url=rest+(rest.indexOf('?')>-1?'&':'?')+qs.toString();
|
var url=rest+(rest.indexOf('?')>-1?'&':'?')+qs.toString();
|
||||||
panel.classList.add('is-ajax-loading');
|
panel.classList.add('is-ajax-loading');
|
||||||
fetch(url,{credentials:'same-origin',headers:{Accept:'application/json','X-WP-Nonce':(window.aksrtData&&aksrtData.restNonce)||''}})
|
fetch(url,{credentials:'same-origin',headers:{Accept:'application/json','X-WP-Nonce':(window.aksrtData&&aksrtData.restNonce)||''}})
|
||||||
@@ -94,8 +104,16 @@ class WidgetForumTabTopics extends \WP_Widget {
|
|||||||
}).catch(function(){panel.classList.remove('is-ajax-loading');});
|
}).catch(function(){panel.classList.remove('is-ajax-loading');});
|
||||||
}
|
}
|
||||||
function go(i){
|
function go(i){
|
||||||
btns.forEach(function(b,idx){b.classList.toggle('is-active',idx===i);});
|
btns.forEach(function(b,idx){
|
||||||
panels.forEach(function(p,idx){p.classList.toggle('is-active',idx===i);});
|
var on=idx===i;
|
||||||
|
b.classList.toggle('is-active',on);
|
||||||
|
b.setAttribute('aria-selected',on?'true':'false');
|
||||||
|
});
|
||||||
|
panels.forEach(function(p,idx){
|
||||||
|
var on=idx===i;
|
||||||
|
p.classList.toggle('is-active',on);
|
||||||
|
if(on){p.removeAttribute('hidden');}else{p.setAttribute('hidden','');}
|
||||||
|
});
|
||||||
var btn=btns[i], panel=panels[i];
|
var btn=btns[i], panel=panels[i];
|
||||||
if(btn&&panel) load(panel, btn.getAttribute('data-orderby')||'date');
|
if(btn&&panel) load(panel, btn.getAttribute('data-orderby')||'date');
|
||||||
}
|
}
|
||||||
@@ -148,6 +166,8 @@ class WidgetForumTabTopics extends \WP_Widget {
|
|||||||
$defaults = [
|
$defaults = [
|
||||||
'title' => __('论坛栏目', 'aksrt'),
|
'title' => __('论坛栏目', 'aksrt'),
|
||||||
'count' => 6,
|
'count' => 6,
|
||||||
|
'style' => 'mini',
|
||||||
|
'plate' => 0,
|
||||||
'tabs' => "最新|date\n热门|views\n精华|essence",
|
'tabs' => "最新|date\n热门|views\n精华|essence",
|
||||||
];
|
];
|
||||||
$instance = wp_parse_args($instance, $defaults);
|
$instance = wp_parse_args($instance, $defaults);
|
||||||
@@ -170,6 +190,19 @@ class WidgetForumTabTopics extends \WP_Widget {
|
|||||||
<input class="tiny-text" type="number" min="1" max="20" name="<?php echo esc_attr($this->get_field_name('count')); ?>" value="<?php echo esc_attr((string) $instance['count']); ?>">
|
<input class="tiny-text" type="number" min="1" max="20" name="<?php echo esc_attr($this->get_field_name('count')); ?>" value="<?php echo esc_attr((string) $instance['count']); ?>">
|
||||||
</label>
|
</label>
|
||||||
</p>
|
</p>
|
||||||
|
<p>
|
||||||
|
<label><?php esc_html_e('样式', 'aksrt'); ?>
|
||||||
|
<select name="<?php echo esc_attr($this->get_field_name('style')); ?>">
|
||||||
|
<option value="mini" <?php selected($instance['style'], 'mini'); ?>><?php esc_html_e('迷你信息行', 'aksrt'); ?></option>
|
||||||
|
<option value="rank" <?php selected($instance['style'], 'rank'); ?>><?php esc_html_e('排行榜', 'aksrt'); ?></option>
|
||||||
|
</select>
|
||||||
|
</label>
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
<label><?php esc_html_e('版块 ID(可选)', 'aksrt'); ?>
|
||||||
|
<input class="tiny-text" type="number" min="0" name="<?php echo esc_attr($this->get_field_name('plate')); ?>" value="<?php echo esc_attr((string) ((int) $instance['plate'])); ?>">
|
||||||
|
</label>
|
||||||
|
</p>
|
||||||
<p>
|
<p>
|
||||||
<label><?php esc_html_e('栏目(每行: 标题|排序 date/views/essence/comments)', 'aksrt'); ?>
|
<label><?php esc_html_e('栏目(每行: 标题|排序 date/views/essence/comments)', 'aksrt'); ?>
|
||||||
<textarea class="widefat" rows="4" name="<?php echo esc_attr($this->get_field_name('tabs')); ?>"><?php echo esc_textarea((string) $tabs_val); ?></textarea>
|
<textarea class="widefat" rows="4" name="<?php echo esc_attr($this->get_field_name('tabs')); ?>"><?php echo esc_textarea((string) $tabs_val); ?></textarea>
|
||||||
@@ -179,9 +212,15 @@ class WidgetForumTabTopics extends \WP_Widget {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public function update($new_instance, $old_instance): array {
|
public function update($new_instance, $old_instance): array {
|
||||||
|
$style = sanitize_key((string) ($new_instance['style'] ?? 'mini'));
|
||||||
|
if (!in_array($style, ['mini', 'rank'], true)) {
|
||||||
|
$style = 'mini';
|
||||||
|
}
|
||||||
return [
|
return [
|
||||||
'title' => sanitize_text_field((string) ($new_instance['title'] ?? '')),
|
'title' => sanitize_text_field((string) ($new_instance['title'] ?? '')),
|
||||||
'count' => max(1, min(20, (int) ($new_instance['count'] ?? 6))),
|
'count' => max(1, min(20, (int) ($new_instance['count'] ?? 6))),
|
||||||
|
'style' => $style,
|
||||||
|
'plate' => max(0, (int) ($new_instance['plate'] ?? 0)),
|
||||||
'tabs' => sanitize_textarea_field((string) ($new_instance['tabs'] ?? '')),
|
'tabs' => sanitize_textarea_field((string) ($new_instance['tabs'] ?? '')),
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -106,7 +106,8 @@ class WidgetForumTopicTerms extends \WP_Widget {
|
|||||||
echo $args['before_title'] . esc_html($title) . $args['after_title']; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
|
echo $args['before_title'] . esc_html($title) . $args['after_title']; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
|
||||||
}
|
}
|
||||||
// IAS-style wrap for remote refresh.
|
// IAS-style wrap for remote refresh.
|
||||||
echo '<div class="zib-widget padding-6 aksrt-ftag-wrap">';
|
$rest = rest_url('aksrt/v1/widgets/forum-terms');
|
||||||
|
echo '<div class="zib-widget padding-6 aksrt-ftag-wrap ajaxpager" data-aksrt-ajaxpager data-aksrt-ajax-url="' . esc_url($rest) . '">';
|
||||||
echo $html; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
|
echo $html; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
|
||||||
echo '</div>';
|
echo '</div>';
|
||||||
echo $args['after_widget']; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
|
echo $args['after_widget']; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
|
||||||
|
|||||||
@@ -25,6 +25,13 @@ class WidgetPricingPlans extends \WP_Widget {
|
|||||||
public function widget($args, $instance): void {
|
public function widget($args, $instance): void {
|
||||||
$plans = $this->normalize_plans($instance['lists'] ?? $instance['plans'] ?? []);
|
$plans = $this->normalize_plans($instance['lists'] ?? $instance['plans'] ?? []);
|
||||||
if (!$plans) {
|
if (!$plans) {
|
||||||
|
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
|
||||||
|
: '<p class="widget-empty">' . esc_html__('请配置至少一个价格方案', 'aksrt') . '</p>';
|
||||||
|
echo $args['after_widget']; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
$trust = $this->normalize_trust($instance['trust_items'] ?? []);
|
$trust = $this->normalize_trust($instance['trust_items'] ?? []);
|
||||||
|
|||||||
@@ -25,6 +25,13 @@ class WidgetReviews extends \WP_Widget {
|
|||||||
public function widget($args, $instance): void {
|
public function widget($args, $instance): void {
|
||||||
$reviews = $this->normalize($instance['reviews'] ?? []);
|
$reviews = $this->normalize($instance['reviews'] ?? []);
|
||||||
if (!$reviews) {
|
if (!$reviews) {
|
||||||
|
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
|
||||||
|
: '<p class="widget-empty">' . esc_html__('请添加至少一条评价', 'aksrt') . '</p>';
|
||||||
|
echo $args['after_widget']; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
$pc = max(1, min(6, (float) ($instance['desktop_per_view'] ?? 3)));
|
$pc = max(1, min(6, (float) ($instance['desktop_per_view'] ?? 3)));
|
||||||
@@ -44,7 +51,8 @@ class WidgetReviews extends \WP_Widget {
|
|||||||
echo '<div class="swiper-slide aksrt-reviews__slide"><div class="aksrt-reviews__card" data-aksrt-tilt data-tilt-max="8">';
|
echo '<div class="swiper-slide aksrt-reviews__slide"><div class="aksrt-reviews__card" data-aksrt-tilt data-tilt-max="8">';
|
||||||
echo '<div class="aksrt-reviews__head">';
|
echo '<div class="aksrt-reviews__head">';
|
||||||
if ($r['avatar'] !== '') {
|
if ($r['avatar'] !== '') {
|
||||||
echo '<img class="aksrt-reviews__avatar" src="' . esc_url($r['avatar']) . '" alt="" loading="lazy" width="44" height="44" />';
|
$ph = get_template_directory_uri() . '/assets/img/placeholder.svg';
|
||||||
|
echo '<img class="aksrt-reviews__avatar aksrt-lazy lazyload" data-src="' . esc_url($r['avatar']) . '" src="' . esc_url($ph) . '" alt="" loading="lazy" width="44" height="44" />';
|
||||||
} else {
|
} else {
|
||||||
echo '<span class="aksrt-reviews__avatar is-placeholder"><i class="fa fa-user" aria-hidden="true"></i></span>';
|
echo '<span class="aksrt-reviews__avatar is-placeholder"><i class="fa fa-user" aria-hidden="true"></i></span>';
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -130,7 +130,8 @@ class WidgetUserCard extends \WP_Widget {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
echo '<div class="aksrt-user-card__avatar user-avatar">';
|
echo '<div class="aksrt-user-card__avatar user-avatar">';
|
||||||
echo '<a href="' . esc_url($profile_url) . '"><img src="' . esc_url($avatar_url) . '" alt="' . esc_attr($user->display_name) . '" loading="lazy" width="72" height="72" /></a>';
|
$ph = get_template_directory_uri() . '/assets/img/placeholder.svg';
|
||||||
|
echo '<a href="' . esc_url($profile_url) . '"><img class="aksrt-lazy lazyload" data-src="' . esc_url($avatar_url) . '" src="' . esc_url($ph) . '" alt="' . esc_attr($user->display_name) . '" loading="lazy" width="72" height="72" /></a>';
|
||||||
echo '</div>';
|
echo '</div>';
|
||||||
echo '<h4 class="aksrt-user-card__name user-name">' . $name_html . '</h4>'; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
|
echo '<h4 class="aksrt-user-card__name user-name">' . $name_html . '</h4>'; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
|
||||||
if ($bio !== '') {
|
if ($bio !== '') {
|
||||||
|
|||||||
Reference in new issue
Block a user