RP_Rave1_theme/template-parts/toc.php

38 lines
1.1 KiB
PHP
Raw Permalink Normal View History

2025-01-10 10:27:58 +00:00
<?php
function generate_table_of_contents($content)
{
if (is_single()) {
$matches = [];
// Címsorok keresése a tartalomban (H2-H6)
preg_match_all('/<h[2-6][^>]*>(.*?)<\/h[2-6]>/', $content, $matches);
if (!empty($matches[0])) {
$toc = '<div id="toc-container">';
$toc .= '<details>';
$toc .= '<summary>Tartalomjegyzék</summary>';
$toc .= '<ul>';
foreach ($matches[1] as $key => $heading) {
$slug = 'heading-' . $key;
// Horgonypontok hozzáadása a címsorokhoz
$content = str_replace($matches[0][$key], '<a id="' . $slug . '"></a>' . $matches[0][$key], $content);
// Marker automatikusan az <li> ::marker ál-eleméhez kerül
$toc .= '<li><a href="#' . $slug . '">' . strip_tags($heading) . '</a></li>';
}
$toc .= '</ul>';
$toc .= '</details>';
$toc .= '</div>';
// TOC hozzáadása a tartalom elejére
$content = $toc . $content;
} else {
// Debug üzenet, ha nincsenek címsorok
error_log('Nincsenek címsorok a tartalomban.');
}
}
return $content;
}
add_filter('the_content', 'generate_table_of_contents');
?>