Возникла необходимость написания функции, которая бы обрабатывала текст особым образом между всеми тэгами в тексте вида [xx] [/xx] в php текста. Ниже об этом небольшая поэма с показом примера для WordPress…
В примере рассмотрен пример, где текст в тэге становится жирным.
Итак, сгенерировнаная функция выглядит так:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
<? function WorkWithTags($content){ $Tag ="xx";// считаем, что есть тэг [xx] и [/xx]. Вот тут и меняйте текст //Поиск всех тегов нужного вида [xx] [/xx] и сохранение текста между ними. Вместо [xx] и [/xx] вставьте свои тэги. if (preg_match_all('~['.$Tag.'](.*?)[/'.$Tag.']~is', $content, $arr)) { //Пробегаем по всем найденным тэгам foreach ($arr[1] as $value) { //Тут производим анализ текста из переменной $value и его изменение в переменную $newvalue //НАЧАЛО ИЗМЕНЕНИЙ $newvalue = "<b>".$value."</b>"; // Пример изменений //КОНЕЦ ИЗМЕНЕНИЙ $content=str_replace($value, $newvalue, $content);//заменим старые варианты подстрок между тэгами на новые } //Удалим тэги [xx] и [/xx] $tr=array('['.$Tag.']'=>'','[/'.$Tag.']'=>'',); $content=strtr($content,$tr); } return $content; } ?> |
В ней в качестве параметра $Tag =”xx” и задается название тэга.
Если у вас есть такой код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
<html> <head> <meta charset="UTF-8"> </head> <body> <? function WorkWithTags($content){ $Tag ="xx";// считаем, что есть тэг [xx] и [/xx]. Вот тут и меняйте текст //Поиск всех тегов нужного вида [xx] [/xx] и сохранение текста между ними. Вместо [xx] и [/xx] вставьте свои тэги. if (preg_match_all('~['.$Tag.'](.*?)[/'.$Tag.']~is', $content, $arr)) { //Пробегаем по всем найденным тэгам foreach ($arr[1] as $value) { //Тут производим анализ текста из переменной $value и его изменение в переменную $newvalue //НАЧАЛО ИЗМЕНЕНИЙ $newvalue = "<b>".$value."</b>"; // Пример изменений //КОНЕЦ ИЗМЕНЕНИЙ $content=str_replace($value, $newvalue, $content);//заменим старые варианты подстрок между тэгами на новые } //Удалим тэги [xx] и [/xx] $tr=array('['.$Tag.']'=>'','[/'.$Tag.']'=>'',); $content=strtr($content,$tr); } return $content; } ?> <? $S="[xx]наташа[/xx] ... [xx]даша[/xx] ... [xx]настя[/xx]"; echo "$S<br>"; $S=WorkWithTags($S); echo "$S<br>"; ?> </body> </html> |
То вы получите вот это:
Если вы хотите добавить в WordPress функцию обработки шорттега, то найдите файл functions.php в вашей теме и добавьте такое, в конце файла:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
add_filter('the_content', 'WorkWithTags'); function WorkWithTags($content){ $Tag ="xx";// считаем, что есть тэг [xx] и [/xx]. Вот тут и меняйте текст //Поиск всех тегов нужного вида [xx] [/xx] и сохранение текста между ними. Вместо [xx] и [/xx] вставьте свои тэги. if (preg_match_all('~['.$Tag.'](.*?)[/'.$Tag.']~is', $content, $arr)) { //Пробегаем по всем найденным тэгам foreach ($arr[1] as $value) { //Тут производим анализ текста из переменной $value и его изменение в переменную $newvalue //НАЧАЛО ИЗМЕНЕНИЙ $newvalue = "<b>".$value."</b>"; // Пример изменений //КОНЕЦ ИЗМЕНЕНИЙ $content=str_replace($value, $newvalue, $content);//заменим старые варианты подстрок между тэгами на новые } //Удалим тэги [xx] и [/xx] $tr=array('['.$Tag.']'=>'','[/'.$Tag.']'=>'',); $content=strtr($content,$tr); } return $content; } |
В общем всё!
Кстати, если вам нужно просто обрамить текст некоторыми тегами вместо [xx] и [/xx], то можно сделать проще. Ниже показан пример подобной функции в WordPress. А описанный выше в статье способ предназначен, когда вам нужно иметь возможность как-то обрабатывать текст между тегами, а не только обрамить тегами.
1 2 3 4 5 6 7 8 9 10 |
add_filter('the_content', 'make_important'); function make_important($content){ if( strpos($content, '[important]')===false ) return $content; $tr=array( "[important]"=>"<span class=\"important\">", "[/important]"=>"</span>", ); $content=strtr($content,$tr); return $content; } |