esc_html__('横向无缝滚动的合作伙伴/友情链接条。', 'aksrt'), 'classname' => 'widget_aksrt_partners_scroll', ] ); } public function widget($args, $instance): void { $partners = $this->resolve_partners($instance); if (!$partners) { if (current_user_can('manage_options')) { echo $args['before_widget']; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped echo function_exists('aksrt_get_widget_null') ? aksrt_get_widget_null(__('暂无合作伙伴,请在模块中添加', 'aksrt')) // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped : '
'; echo $args['after_widget']; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped } return; } $rows = max(1, min(4, (int) ($instance['rows'] ?? 1))); $m_rows = max(1, min(4, (int) ($instance['m_rows'] ?? 1))); $style_type = sanitize_key((string) ($instance['style_type'] ?? 'card')); if (!in_array($style_type, ['card', 'logo', 'chip'], true)) { $style_type = 'card'; } $card_w = max(60, min(400, (int) ($instance['card_width'] ?? 220))); $card_h = max(40, min(200, (int) ($instance['card_height'] ?? 90))); $speed = max(1, min(20, (int) ($instance['speed'] ?? 3))); $direction = sanitize_key((string) ($instance['direction'] ?? 'alternate')); $pause = !empty($instance['pause_hover']) || !isset($instance['pause_hover']); $card_bg = !empty($instance['card_bg']) || !isset($instance['card_bg']); $end_fade = !empty($instance['end_fade']) || !isset($instance['end_fade']); $go_link = !empty($instance['go_link']); $show_bg = !empty($instance['show_widget_bg']) || !isset($instance['show_widget_bg']); $radius = max(0, min(40, (int) ($instance['card_radius'] ?? 10))); $use_rows = wp_is_mobile() ? $m_rows : $rows; $rows_data = array_fill(0, $use_rows, []); foreach (array_values($partners) as $i => $p) { $rows_data[$i % $use_rows][] = $p; } $rows_data = array_values(array_filter($rows_data, static fn($r) => !empty($r))); 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 } $wrap_class = 'aksrt-partners-scroll aksrt-ps-style-' . $style_type; if ($pause) { $wrap_class .= ' aksrt-ps-pause-hover'; } if ($card_bg) { $wrap_class .= ' aksrt-ps-card-bg'; } if ($end_fade) { $wrap_class .= ' aksrt-ps-end-fade'; } $style = sprintf( '--aksrt-ps-w:%dpx;--aksrt-ps-h:%dpx;--aksrt-ps-radius:%dpx;--aksrt-ps-speed:%d;', $card_w, $card_h, $radius, $speed ); $outer = $show_bg ? 'aksrt-partners-scroll-wrap' : 'aksrt-partners-scroll-wrap is-bare'; echo '