esc_html__('图标在上、文案在下的竖版图标卡片网格。', 'aksrt'), ]); } public function widget($args, $instance): void { $cards = isset($instance['cards']) && is_array($instance['cards']) ? $instance['cards'] : []; $columns = max(1, min(4, (int) ($instance['columns'] ?? $instance['pc_row'] ?? 2))); $m_cols = max(1, min(3, (int) ($instance['m_row'] ?? 2))); $go_link = !empty($instance['go_link']); $show_bg = !isset($instance['show_widget_bg']) || !empty($instance['show_widget_bg']); $icon_size = max(18, min(48, (int) ($instance['icon_size'] ?? 28))); $valid = []; foreach ($cards as $card) { if (!is_array($card)) { continue; } $title = sanitize_text_field((string) ($card['title'] ?? '')); if ($title === '') { continue; } $url = esc_url_raw(trim((string) ($card['link'] ?? $card['url'] ?? ''))); if ($url !== '' && $go_link && function_exists('aksrt_go_link')) { $url = aksrt_go_link($url, true); } $valid[] = [ 'title' => $title, 'icon' => sanitize_text_field((string) ($card['icon'] ?? '')), 'desc' => sanitize_text_field((string) ($card['description'] ?? $card['desc'] ?? '')), 'url' => $url, ]; } if (!$valid) { return; } 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 } $style = sprintf('--ic-columns:%d;--ic-m-columns:%d;--ic-icon:%dpx;', $columns, $m_cols, $icon_size); echo '
'; echo $args['after_widget']; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped } public function form($instance): void { $cards = isset($instance['cards']) && is_array($instance['cards']) ? $instance['cards'] : []; while (count($cards) < 4) { $cards[] = ['title' => '', 'icon' => '', 'link' => '', 'description' => '']; } ?>