Как настроить генерацию автоматического оглавления для поста в WordPress?
function generate_toc($content) {
$pattern = '/(.*?)/si';
preg_match_all($pattern, $content, $matches, PREG_SET_ORDER);
$toc = '';
foreach ($matches as $match) {
$toc .= '- ' . $match[1] . '
';
}
$toc .= '
';
$content = '' . $toc . '' . $content;
return $content;
}
add_filter('the_content', 'generate_toc');
Однако, этот код не работает должным образом. Оглавление не отображается, а просто выводится в виде текста над содержимым поста.
Буду благодарен за помощь и подсказки, как исправить данную проблему и настроить генерацию автоматического оглавления для поста в WordPress.
Заранее спасибо! Ответы:
Проблема, с которой ты столкнулся, связана с тем, что фильтр "the_content" не принимает параметр, содержащий сам контент поста. Вместо этого, фильтр передает только переменную $content, которая содержит весь HTML-код содержимого поста.
Для того чтобы исправить данную проблему и настроить генерацию автоматического оглавления для поста в WordPress, тебе нужно немного изменить код.
Вот новая версия функции generate_toc():
function generate_toc($content) {
$pattern = '/]*>(.*?)/i';
preg_match_all($pattern, $content, $matches, PREG_SET_ORDER);
$toc = '';
foreach ($matches as $match) {
$toc .= '- ' . $match[2] . '
';
}
$toc .= '
';
$content = '' . $toc . '' . $content;
return $content;
}
add_filter('the_content', 'generate_toc');
Этот код использует регулярное выражение для поиска всех HTML-тегов заголовков (h1, h2, h3 и так далее) и сохраняет их в массив $matches. Затем, он создает оглавление, состоящее из ссылок на каждый заголовок, используя функцию sanitize_title() для генерации якорных ссылок.
Наконец, оглавление вставляется перед содержимым поста с помощью HTML-тегов .
После внесения этих изменений, генерация автоматического оглавления должна работать должным образом на твоем сайте WordPress.
Надеюсь, этот ответ поможет тебе решить проблему! Если у тебя есть еще вопросы, не стесняйся задавать их. Удачи!