esc_html__('显示友情链接(设置项或 WordPress 书签)。', 'aksrt'), ]); } public function widget($args, $instance): void { echo $args['before_widget']; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped $title = apply_filters('widget_title', (string) ($instance['title'] ?? __('友情链接', 'aksrt')), $instance, $this->id_base); $show_icon = !empty($instance['show_icon']) || !isset($instance['show_icon']); $columns = max(1, min(4, (int) ($instance['columns'] ?? 2))); $source = sanitize_key((string) ($instance['source'] ?? 'settings')); $go_link = !empty($instance['go_link']); $limit = max(1, min(100, (int) ($instance['limit'] ?? 24))); if ($title) { echo $args['before_title'] . esc_html($title) . $args['after_title']; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped } $links = $this->resolve_links($source, $instance, $limit); if (!$links) { echo function_exists('aksrt_get_widget_null') ? aksrt_get_widget_null(__('暂无友情链接', 'aksrt')) // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped : '

' . esc_html__('暂无友情链接', 'aksrt') . '

'; echo $args['after_widget']; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped return; } ?> $instance * @return array> */ private function resolve_links(string $source, array $instance, int $limit): array { if ($source === 'bookmarks') { $bm_args = [ 'orderby' => sanitize_key((string) ($instance['orderby'] ?? 'name')) ?: 'name', 'order' => strtoupper((string) ($instance['order'] ?? 'ASC')) === 'DESC' ? 'DESC' : 'ASC', 'limit' => $limit, ]; $cats = trim((string) ($instance['cats'] ?? '')); if ($cats !== '') { $bm_args['category'] = $cats; } $out = []; foreach (get_bookmarks($bm_args) as $b) { $out[] = [ 'name' => (string) $b->link_name, 'url' => (string) $b->link_url, 'description' => (string) $b->link_description, 'icon' => (string) $b->link_image, ]; } return $out; } $links = class_exists('\AKSRT\Settings\Settings') ? \AKSRT\Settings\Settings::get_friend_links() : []; if (!is_array($links) || !$links) { // Fallback to WP bookmarks when settings empty. return $this->resolve_links('bookmarks', $instance, $limit); } return array_slice(array_values($links), 0, $limit); } public function form($instance): void { ?>


sanitize_text_field((string) ($new_instance['title'] ?? '')), 'source' => ($new_instance['source'] ?? '') === 'bookmarks' ? 'bookmarks' : 'settings', 'columns' => max(1, min(4, (int) ($new_instance['columns'] ?? 2))), 'limit' => max(1, min(100, (int) ($new_instance['limit'] ?? 24))), 'cats' => sanitize_text_field((string) ($new_instance['cats'] ?? '')), 'show_icon' => !empty($new_instance['show_icon']) ? 1 : 0, 'go_link' => !empty($new_instance['go_link']) ? 1 : 0, 'orderby' => sanitize_key((string) ($new_instance['orderby'] ?? 'name')), 'order' => strtoupper((string) ($new_instance['order'] ?? 'ASC')) === 'DESC' ? 'DESC' : 'ASC', ]; } }