.toc-list` from `[data-nav]` headings. * * @package AKSRT */ namespace AKSRT\Widgets; defined('ABSPATH') || exit; class WidgetPostsNavs extends \WP_Widget { public function __construct() { parent::__construct( 'aksrt_posts_navs', esc_html__('AKSRT 文章目录树', 'aksrt'), [ 'description' => esc_html__('显示当前文章/帖子标题目录,非详情页不输出。标题超过 2 个才填充。', 'aksrt'), 'classname' => 'widget_aksrt_posts_navs', ] ); } public function widget($args, $instance): void { if (!is_singular(['post', 'page', 'aksrt_forum_topic', 'aksrt_product'])) { 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 : '

' . esc_html__('目录树仅在详情页显示', 'aksrt') . '

'; echo $args['after_widget']; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped } return; } $title = sanitize_text_field((string) ($instance['title'] ?? __('文章目录', 'aksrt'))); $mini_title = sanitize_text_field((string) ($instance['mini_title'] ?? '')); $in_affix = !empty($instance['in_affix']); $data_title = $title; if ($mini_title !== '') { $data_title .= ($data_title !== '' ? ' · ' : '') . $mini_title; } if ($data_title === '') { $data_title = __('文章目录', 'aksrt'); } // Mirror aksrt-single-render built-in TOC shell so page-template.js binds. $classes = 'zib-widget toc-widget posts-nav-box'; if ($in_affix) { $classes .= ' is-affix'; } echo $args['before_widget']; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped printf( '
', esc_attr($classes), $in_affix ? ' data-affix="true"' : '', esc_attr($data_title), esc_attr($data_title) ); echo '

' . esc_html($data_title) . '

'; echo '
    '; echo '
    '; echo $args['after_widget']; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped } public function form($instance): void { $title = (string) ($instance['title'] ?? __('文章目录', 'aksrt')); $mini_title = (string) ($instance['mini_title'] ?? ''); $in_affix = !empty($instance['in_affix']); ?>

    sanitize_text_field((string) ($new_instance['title'] ?? '')), 'mini_title' => sanitize_text_field((string) ($new_instance['mini_title'] ?? '')), 'in_affix' => !empty($new_instance['in_affix']) ? 1 : 0, ]; } }