PluginProbe
BetterDocs – AI Documentation, Knowledge Base, MCP Server, Docs, Wikis, FAQ & Chatbot / 4.9.0
BetterDocs – AI Documentation, Knowledge Base, MCP Server, Docs, Wikis, FAQ & Chatbot v4.9.0
4.9.1 4.9.0 4.8.2 4.8.1 4.8.0 4.7.0 4.6.2 4.6.1 4.6.0 4.5.6 4.5.5 4.5.4 4.5.3 4.5.2 4.5.1 4.5.0 4.4.1 4.4.0 3.3.4 3.4.0 3.4.1 3.4.2 3.5.0 3.5.1 3.5.2 All 199 releases
betterdocs / views / shortcodes / toc.php

toc.php in BetterDocs – AI Documentation, Knowledge Base, MCP Server, Docs, Wikis, FAQ & Chatbot 4.9.0, at views/shortcodes/toc.php

52 lines 2.7 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 // phpcs:disable WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedVariableFound -- view template receives variables via extract(); prefixing is impractical.
3
4 if ( ! defined( 'ABSPATH' ) ) {
5 exit;
6 }
7 /** @var \WPDeveloper\BetterDocs\Shortcodes\ToC $widget */
8 if ( $post !== null ) {
9 // Check if post is password protected and user hasn't provided correct password
10 if ( post_password_required( $post->ID ) ) {
11 // Don't show ToC for password-protected posts until password is provided
12 return;
13 }
14
15 // Process content for special characters without triggering heavy content filters
16 // This prevents memory issues from plugins like WPML while still handling special characters
17 $processed_content = $widget->process_content_for_toc( $post->post_content );
18 $toc_data = $widget->format_toc_data( $processed_content, $htags, $hierarchy );
19 if ( empty( $toc_data->items ) ) {
20 return;
21 }
22 } else {
23 return;
24 }
25
26
27 $collapsible_arrow = '';
28 $wrapper_classes = [ 'betterdocs-toc' ];
29
30 if ( empty( $toc_title ) ) {
31 $toc_title = betterdocs()->settings->get( 'toc_title', __( 'Table of Contents', 'betterdocs' ) );
32 $toc_title = esc_html( stripslashes( $toc_title ) );
33 }
34
35 if ( $collapsible_on_mobile == '1' ) {
36 $wrapper_classes[] = 'collapsible-sm';
37 $collapsible_arrow = "<svg class='angle-icon angle-up' aria-hidden='true' focusable='false' data-prefix='fas' data-icon='angle-up' class='svg-inline--fa fa-angle-up fa-w-10' role='img' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 320 512'><path fill='currentColor' d='M177 159.7l136 136c9.4 9.4 9.4 24.6 0 33.9l-22.6 22.6c-9.4 9.4-24.6 9.4-33.9 0L160 255.9l-96.4 96.4c-9.4 9.4-24.6 9.4-33.9 0L7 329.7c-9.4-9.4-9.4-24.6 0-33.9l136-136c9.4-9.5 24.6-9.5 34-.1z'></path></svg><svg class='angle-icon angle-down' aria-hidden='true' focusable='false' data-prefix='fas' data-icon='angle-down' class='svg-inline--fa fa-angle-down fa-w-10' role='img' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 320 512'><path fill='currentColor' d='M143 352.3L7 216.3c-9.4-9.4-9.4-24.6 0-33.9l22.6-22.6c9.4-9.4 24.6-9.4 33.9 0l96.4 96.4 96.4-96.4c9.4-9.4 24.6-9.4 33.9 0l22.6 22.6c9.4 9.4 9.4 24.6 0 33.9l-136 136c-9.2 9.4-24.4 9.4-33.8 0z'></path></svg>";
38 }
39
40 if ( $list_number == '1' ) {
41 $wrapper_classes[] = 'toc-list-number';
42 }
43 ?>
44
45 <div class="<?php echo esc_attr( implode( ' ', $wrapper_classes ) ); ?>">
46 <span class="toc-title">
47 <?php echo $toc_title . $collapsible_arrow; //phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Title Is Escaped Above & Svg's Cannot Be Escaped ?>
48 </span>
49
50 <?php echo $toc_data->print( $toc_data->items, $hierarchy, 1 ); //phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Already Escaped Above, Svg Is Not Needed For Escaping ?>
51 </div>
52