esc_html__('多图轮播,支持链接与标题。', 'aksrt'), 'classname' => 'widget_aksrt_slider', ] ); } public function widget($args, $instance): void { $slides = $this->normalize_slides($instance['slides'] ?? []); if (!$slides) { return; } $interval = max(2, min(20, (int) ($instance['interval'] ?? 4))); $loop = !empty($instance['loop']); $dots = !empty($instance['pagination']); $nav = !empty($instance['button']); $blank = !empty($instance['blank']); $height = max(80, min(800, (int) ($instance['height'] ?? 220))); echo $args['before_widget']; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped $title = apply_filters('widget_title', (string) ($instance['title'] ?? ''), $instance, $this->id_base); if ($title !== '') { echo $args['before_title'] . esc_html($title) . $args['after_title']; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped } $uid = 'aksrt-slider-' . esc_attr($this->id); printf( '
', $uid, $interval * 1000, $loop ? '1' : '0', $height ); echo '
'; foreach ($slides as $i => $slide) { $active = $i === 0 ? ' is-active' : ''; echo '
'; $img = '' . esc_attr($slide['title']) . ''; if ($slide['href'] !== '') { printf( '%s', esc_url($slide['href']), $blank ? ' target="_blank" rel="noopener noreferrer"' : '', $img // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ); } else { echo $img; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped } if ($slide['title'] !== '' || $slide['desc'] !== '') { echo '
'; if ($slide['title'] !== '') { echo '' . esc_html($slide['title']) . ''; } if ($slide['desc'] !== '') { echo '' . esc_html($slide['desc']) . ''; } echo '
'; } echo '
'; } echo '
'; if ($nav) { echo ''; echo ''; } if ($dots) { echo '
'; foreach ($slides as $i => $slide) { printf( '', $i === 0 ? ' is-active' : '', (int) $i, esc_attr(sprintf(__('第 %d 张', 'aksrt'), $i + 1)) ); } echo '
'; } echo '
'; echo $args['after_widget']; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped // Inline init once per widget (no extra enqueue dependency). ?> normalize_slides($instance['slides'] ?? []); if (!$slides) { $slides = [ ['image' => '', 'href' => '', 'title' => '', 'desc' => ''], ['image' => '', 'href' => '', 'title' => '', 'desc' => ''], ]; } ?>




$slide) : ?>


" placeholder=""> " placeholder=""> " placeholder=""> " placeholder="">

normalize_slides($new_instance['slides'] ?? []); return [ 'title' => sanitize_text_field((string) ($new_instance['title'] ?? '')), 'interval' => max(2, min(20, (int) ($new_instance['interval'] ?? 4))), 'height' => max(80, min(800, (int) ($new_instance['height'] ?? 220))), 'loop' => !empty($new_instance['loop']) ? 1 : 0, 'button' => !empty($new_instance['button']) ? 1 : 0, 'pagination' => !empty($new_instance['pagination']) ? 1 : 0, 'blank' => !empty($new_instance['blank']) ? 1 : 0, 'slides' => $slides, ]; } /** * @param mixed $raw * @return array */ private function normalize_slides($raw): array { if (!is_array($raw)) { return []; } $out = []; foreach ($raw as $row) { if (!is_array($row)) { continue; } $image = esc_url_raw(trim((string) ($row['image'] ?? $row['link'] ?? ''))); if ($image === '') { continue; } $out[] = [ 'image' => $image, 'href' => esc_url_raw(trim((string) ($row['href'] ?? ''))), 'title' => sanitize_text_field((string) ($row['title'] ?? '')), 'desc' => sanitize_text_field((string) ($row['desc'] ?? $row['dec'] ?? '')), ]; if (count($out) >= 8) { break; } } return $out; } }