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 '
'; foreach ($valid as $card) { $tag = $card['url'] !== '' ? 'a' : 'div'; $extra = $card['url'] !== '' ? ' href="' . esc_url($card['url']) . '" target="_blank" rel="noopener noreferrer"' : ''; echo '<' . $tag . ' class="widget-icon-cards__item is-vertical"' . $extra . '>'; if ($card['icon'] !== '') { echo '
'; } echo '
'; echo '
' . esc_html($card['title']) . '
'; if ($card['desc'] !== '') { echo '
' . esc_html($card['desc']) . '
'; } echo '
'; } 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' => '']; } ?>


$card) : ?>
" value="" placeholder=""> " value="" placeholder=""> " value="" placeholder=""> " value="" placeholder="">
$title, 'icon' => sanitize_text_field((string) ($card['icon'] ?? '')), 'link' => esc_url_raw(trim((string) ($card['link'] ?? ''))), 'description' => sanitize_text_field((string) ($card['description'] ?? '')), ]; if (count($cards) >= 12) { break; } } } return [ 'title' => sanitize_text_field((string) ($new_instance['title'] ?? '')), 'columns' => max(1, min(4, (int) ($new_instance['columns'] ?? 2))), 'm_row' => max(1, min(3, (int) ($new_instance['m_row'] ?? 2))), 'go_link' => !empty($new_instance['go_link']) ? 1 : 0, 'show_widget_bg' => !empty($new_instance['show_widget_bg']) ? 1 : 0, 'cards' => $cards, ]; } }