Optional TOC Implementation

This commit is contained in:
2026-04-21 01:42:22 +02:00
parent 56a8b97875
commit 04eeda3580
8 changed files with 726 additions and 7 deletions
+9 -1
View File
@@ -14,4 +14,12 @@ function zeitfresser_get_default_sticky_menu() {
function zeitfresser_get_default_container_width() {
return 1400;
}
}
function zeitfresser_get_default_show_article_toc() {
return true;
}
function zeitfresser_get_default_article_toc_min_headlines() {
return 3;
}
+1
View File
@@ -24,6 +24,7 @@ function zeitfresser_register_general_customization_section( $wp_customize ) {
require dirname( __FILE__ ) . '/default-general.php';
require dirname( __FILE__ ) . '/container-width/container-width.php';
require dirname( __FILE__ ) . '/social-links/social-links.php';
require dirname( __FILE__ ) . '/toc-options.php';
require dirname( __FILE__ ) . '/../post-snippet/default-post-snippet.php';
require dirname( __FILE__ ) . '/../post-snippet/excerpt/excerpt.php';
+99
View File
@@ -0,0 +1,99 @@
<?php
/**
* TOC related general settings.
*/
add_action( 'customize_register', 'zeitfresser_register_article_toc_options' );
/**
* Sanitize the minimum heading threshold for the article TOC.
*
* @param mixed $value Submitted control value.
* @return int
*/
function zeitfresser_sanitize_article_toc_min_headlines( $value ) {
$value = absint( $value );
if ( $value < 1 ) {
$value = zeitfresser_get_default_article_toc_min_headlines();
}
return min( 50, $value );
}
/**
* Register article TOC options in General Options.
*
* @param WP_Customize_Manager $wp_customize Customizer manager.
* @return void
*/
function zeitfresser_register_article_toc_options( $wp_customize ) {
$article_toc_title = '<hr/><h2>' . esc_html__( 'Article TOC:', 'zeitfresser' ) . '</h2>';
$wp_customize->add_setting(
'article_toc_options_heading',
array(
'sanitize_callback' => 'wp_kses_post',
)
);
$wp_customize->add_control(
new Daisy_Blog_Custom_Text(
$wp_customize,
'article_toc_options_heading',
array(
'section' => 'daisy_blog_general_customization_section',
'label' => $article_toc_title,
'priority' => 12,
)
)
);
$wp_customize->add_setting(
'show_article_toc',
array(
'sanitize_callback' => 'zeitfresser_sanitize_checkbox',
'default' => zeitfresser_get_default_show_article_toc(),
)
);
$wp_customize->add_control(
new Graphthemes_Toggle_Control(
$wp_customize,
'show_article_toc',
array(
'settings' => 'show_article_toc',
'section' => 'daisy_blog_general_customization_section',
'label' => esc_html__( 'Show Article TOC', 'zeitfresser' ),
'description' => esc_html__( 'Enable the floating article TOC on single posts. Default: enabled.', 'zeitfresser' ),
'type' => 'toggle',
'priority' => 13,
)
)
);
$wp_customize->add_setting(
'article_toc_min_headlines',
array(
'sanitize_callback' => 'zeitfresser_sanitize_article_toc_min_headlines',
'default' => zeitfresser_get_default_article_toc_min_headlines(),
)
);
$wp_customize->add_control(
'article_toc_min_headlines',
array(
'settings' => 'article_toc_min_headlines',
'type' => 'number',
'section' => 'daisy_blog_general_customization_section',
'label' => esc_html__( 'Number of Headlines to Start TOC', 'zeitfresser' ),
'description' => esc_html__( 'The article TOC is shown only when this number of headings or more is found. Default: 3.', 'zeitfresser' ),
'priority' => 14,
'input_attrs' => array(
'min' => 1,
'max' => 50,
'step' => 1,
),
)
);
}