Я пытаюсь написать фильтр wordpress, который автоматически переносит содержимое и принимает следующее:
<h2>lesson 1 bannanas</h2>
и заменяет его
<h2 id="lesson-1-bannanas">lesson 1 bannanas</h2>
Поэтому я могу связать людей напрямую с разделами страницы или блога. Как мне это сделать, не прибегая к чему-то тяжелому, как DOMDocument?
Если у вас есть такой когерентный ввод, то вы можете использовать регулярные выражения. В этом случае это очень приемлемо и просто:
$html = preg_replace_callback("#<(h[1-6])>(.*?)</\\1>#", "retitle", $html); function retitle($match) { list($_unused, $h2, $title) = $match; $id = strtolower(strtr($title, " .", "--")); return "<$h2 id='$id'>$title</$h2>"; }
Для преобразования идентификатора требуется немного больше работы. И чтобы сделать регулярное выражение более надежным, строчный шаблон соответствия текста (.*?)
Может быть записан как ([^<>]*)
например.
Другой способ (на самом деле довольно простой, хотя он прибегает к манипуляции с dom) использует jQuery для добавления id, который равен содержимому h2
Вы можете использовать str_replace, чтобы заменить тег открытия h2 на один, содержащий ваш идентификатор
$tag = '<h2>My content</h2>'; $tag = str_replace('<h2>', '<h2 id = "an id">', $tag); echo $tag;