esc_html__('带样式的搜索框', 'aksrt'), ]); } public function widget($args, $instance): void { echo $args['before_widget']; $title = apply_filters('widget_title', $instance['title'] ?? '', $instance, $this->id_base); if ($title) echo $args['before_title'] . esc_html($title) . $args['after_title']; $placeholder = sanitize_text_field($instance['placeholder'] ?? __('搜索文章...', 'aksrt')); ?>

sanitize_text_field($new_instance['title'] ?? ''), 'placeholder' => sanitize_text_field($new_instance['placeholder'] ?? ''), ]; } } // ============================================================ // 2. 公告通知小工具 // ============================================================ class AKSRT_Notice_Widget extends WP_Widget { public function __construct() { parent::__construct('aksrt_notice', esc_html__('AKSRT 公告', 'aksrt'), [ 'description' => esc_html__('显示公告/通知信息', 'aksrt'), ]); } public function widget($args, $instance): void { echo $args['before_widget']; $title = apply_filters('widget_title', $instance['title'] ?? '', $instance, $this->id_base); $content = wp_kses_post($instance['content'] ?? ''); $style = sanitize_key($instance['style'] ?? 'info'); $icon = sanitize_text_field($instance['icon'] ?? 'fas fa-bullhorn'); if ($title) echo $args['before_title'] . esc_html($title) . $args['after_title']; ?>

sanitize_text_field($new_instance['title'] ?? ''), 'content' => wp_kses_post($new_instance['content'] ?? ''), 'style' => in_array($new_instance['style'] ?? '', ['info', 'success', 'warning', 'danger'], true) ? $new_instance['style'] : 'info', 'icon' => sanitize_text_field($new_instance['icon'] ?? 'fas fa-bullhorn'), ]; } } // ============================================================ // 3. 最新评论小工具 // ============================================================ class AKSRT_Recent_Comments_Widget extends WP_Widget { public function __construct() { parent::__construct('aksrt_recent_comments', esc_html__('AKSRT 最新评论', 'aksrt'), [ 'description' => esc_html__('显示最新评论列表', 'aksrt'), ]); } public function widget($args, $instance): void { echo $args['before_widget']; $title = apply_filters('widget_title', $instance['title'] ?? __('最新评论', 'aksrt'), $instance, $this->id_base); $count = max(1, min(20, (int) ($instance['count'] ?? 5))); $show_avatar = !empty($instance['show_avatar']); if ($title) echo $args['before_title'] . esc_html($title) . $args['after_title']; $comments = get_comments([ 'number' => $count, 'status' => 'approve', 'post_status' => 'publish', ]); if ($comments) : ?>
comment_post_ID); if (!$post) continue; ?>
comment_author); ?> comment_date), current_time('timestamp'))); ?>

comment_content, 15, '...')); ?>

ID)); ?>
' . esc_html__('暂无评论', 'aksrt') . '

'; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>

sanitize_text_field($new_instance['title'] ?? ''), 'count' => max(1, min(20, (int) ($new_instance['count'] ?? 5))), 'show_avatar' => !empty($new_instance['show_avatar']), ]; } } // ============================================================ // 4. 友情链接小工具 // ============================================================ class AKSRT_Friend_Links_Widget extends WP_Widget { public function __construct() { parent::__construct('aksrt_friend_links', esc_html__('AKSRT 友情链接', 'aksrt'), [ 'description' => esc_html__('显示友情链接列表', 'aksrt'), ]); } public function widget($args, $instance): void { echo $args['before_widget']; $title = apply_filters('widget_title', $instance['title'] ?? __('友情链接', 'aksrt'), $instance, $this->id_base); $show_icon = !empty($instance['show_icon']); $columns = max(1, min(4, (int) ($instance['columns'] ?? 2))); if ($title) echo $args['before_title'] . esc_html($title) . $args['after_title']; $links = class_exists('AKSRT_Settings') ? AKSRT_Settings::get_friend_links() : []; if (!empty($links)) : ?> ' . esc_html__('暂无友情链接', 'aksrt') . '

'; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>

sanitize_text_field($new_instance['title'] ?? ''), 'columns' => max(1, min(4, (int) ($new_instance['columns'] ?? 2))), 'show_icon'=> !empty($new_instance['show_icon']), ]; } } // ============================================================ // 5. 图标卡片小工具 // ============================================================ class AKSRT_Icon_Cards_Widget extends WP_Widget { public function __construct() { parent::__construct('aksrt_icon_cards', esc_html__('AKSRT 图标卡片', 'aksrt'), [ 'description' => esc_html__('显示图标+文字卡片网格', 'aksrt'), ]); } public function widget($args, $instance): void { echo $args['before_widget']; $title = apply_filters('widget_title', $instance['title'] ?? '', $instance, $this->id_base); $cards = isset($instance['cards']) && is_array($instance['cards']) ? $instance['cards'] : []; $columns = max(1, min(4, (int) ($instance['columns'] ?? 2))); if ($title) echo $args['before_title'] . esc_html($title) . $args['after_title']; if (!empty($cards)) : ?>
< class="widget-icon-cards__item">
>
'', 'icon' => '', 'link' => '', 'description' => '']; } ?>


$card) : ?>

" value="" placeholder="">

" value="" placeholder="">

" value="" placeholder="">

" value="" placeholder="">

sanitize_text_field($card['title'] ?? ''), 'icon' => sanitize_text_field($card['icon'] ?? ''), 'link' => esc_url_raw($card['link'] ?? ''), 'description' => sanitize_text_field($card['description'] ?? ''), ]; } } return [ 'title' => sanitize_text_field($new_instance['title'] ?? ''), 'columns' => max(1, min(4, (int) ($new_instance['columns'] ?? 2))), 'cards' => $cards, ]; } } // ============================================================ // 6. 按钮组小工具 // ============================================================ class AKSRT_Buttons_Widget extends WP_Widget { public function __construct() { parent::__construct('aksrt_buttons', esc_html__('AKSRT 按钮组', 'aksrt'), [ 'description' => esc_html__('显示一组自定义按钮', 'aksrt'), ]); } public function widget($args, $instance): void { echo $args['before_widget']; $title = apply_filters('widget_title', $instance['title'] ?? '', $instance, $this->id_base); $buttons = isset($instance['buttons']) && is_array($instance['buttons']) ? $instance['buttons'] : []; $layout = sanitize_key($instance['layout'] ?? 'vertical'); if ($title) echo $args['before_title'] . esc_html($title) . $args['after_title']; if (!empty($buttons)) : ?>
'', 'url' => '', 'style' => 'primary', 'icon' => '', 'new_window' => false]; } ?>


$btn) : ?>

" value="" placeholder="">

" value="" placeholder="">

" value="" placeholder="">

sanitize_text_field($btn['text'] ?? ''), 'url' => esc_url_raw($btn['url'] ?? ''), 'style' => $style, 'icon' => sanitize_text_field($btn['icon'] ?? ''), 'new_window' => !empty($btn['new_window']), ]; } } return [ 'title' => sanitize_text_field($new_instance['title'] ?? ''), 'layout' => in_array($new_instance['layout'] ?? '', ['vertical', 'horizontal'], true) ? $new_instance['layout'] : 'vertical', 'buttons' => $buttons, ]; } } // ============================================================ // 7. 自定义 HTML / 间距小工具 // ============================================================ class AKSRT_Custom_HTML_Gap_Widget extends WP_Widget { public function __construct() { parent::__construct('aksrt_custom_html_gap', esc_html__('AKSRT 自定义HTML/间距', 'aksrt'), [ 'description' => esc_html__('插入自定义 HTML 或间距', 'aksrt'), ]); } public function widget($args, $instance): void { $mode = sanitize_key($instance['mode'] ?? 'html'); if ($mode === 'gap') { $height = max(0, min(200, (int) ($instance['gap_height'] ?? 20))); echo ''; return; } echo $args['before_widget']; $title = apply_filters('widget_title', $instance['title'] ?? '', $instance, $this->id_base); if ($title) echo $args['before_title'] . esc_html($title) . $args['after_title']; echo '
' . wp_kses_post($instance['content'] ?? '') . '
'; echo $args['after_widget']; } public function form($instance): void { $mode = sanitize_key($instance['mode'] ?? 'html'); ?>

in_array($new_instance['mode'] ?? '', ['html', 'gap'], true) ? $new_instance['mode'] : 'html', 'title' => sanitize_text_field($new_instance['title'] ?? ''), 'content' => wp_kses_post($new_instance['content'] ?? ''), 'gap_height' => max(0, min(200, (int) ($new_instance['gap_height'] ?? 20))), ]; } }