38 lines
1.1 KiB
PHP
38 lines
1.1 KiB
PHP
|
<?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');
|
||
|
|
||
|
?>
|