Создайте цикл foreach для поиска и замены

В настоящее время у меня есть сценарий для моего сайта WordPress, который находит <h3> -tag и добавляет к нему id

 <?php $phrase = get_the_content(); $phrase = apply_filters('the_content', $phrase); $replace = '<h3 id="thetag">'; echo str_replace('<h3>', $replace, $phrase); ?> 

Я хотел бы добавить id="$i++" ко всем тэгам <h3> .

Я думал об этом, но это дает мне ошибку foreach:

 <?php $phrase = get_the_content(); $phrase = apply_filters('the_content', $phrase); $tag='<h3>'; $i=0; foreach ($tag as $replace){ $replace = '<h3 id="'.$i++.'">'; echo str_replace($tag, $replace, $phrase); } ?> 

Ошибка: Warning: Invalid argument supplied for foreach() in...

Есть идеи? М.

В функции str_replace третий параметр является выходной переменной, чтобы проверить, сколько было выполнено замещений. Используйте функцию preg_replace:

 <?php $phrase = get_the_content(); $phrase = apply_filters('the_content', $phrase); $tag='<h3>'; $i=0; $c = substr_count($phrase, $tag); for($i=0; $i<$c; $i++){ $replace = '<h3 id="'.$i.'">'; $phrase = preg_replace('/'.$tag.'/', $replace, $phrase, 1); } echo $phrase; ?> 

Сначала вы хотите получить массив всех тегов, вы делаете foreach на строке.

 foreach(array("<h3>","<h3>") as $replace){ ... } 

Я не тестировал это, но это поможет вам выйти. 🙂

С уважением.