.toc-list` from `[data-nav]` headings. * * @package AKSRT */ namespace AKSRT\Widgets; use AKSRT\Widgets\Traits\CommonWidgetFields; defined('ABSPATH') || exit; class WidgetPostsNavs extends \WP_Widget { use CommonWidgetFields; 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'])) { 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'] ?? '')); $affix = function_exists('aksrt_widget_affix_attrs') ? aksrt_widget_affix_attrs($instance) : ['class' => '', 'attr' => '']; $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' . $affix['class']; echo $args['before_widget']; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped printf( '
', esc_attr($classes), $affix['attr'], 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'] ?? ''); ?>

    render_common_form_section($instance); ?> update_common_fields($new_instance, $old_instance, [ 'title' => sanitize_text_field((string) ($new_instance['title'] ?? '')), 'mini_title' => sanitize_text_field((string) ($new_instance['mini_title'] ?? '')), ]); } }