У меня есть этот код PHP для добавления определенного класса в <a>
элемент в меню WordPress, прежде чем очистить все остальные элементы из WordPress:
<?php
$menuParameters = array(
'menu' => '40',
'container' => false,
'echo' => false,
'items_wrap' => '%3$s',
'depth' => 0,
);
$menu = strip_tags(wp_nav_menu( $menuParameters ), '<a>' );
$find = array('<a');
$replace = array('<a class="pro-link pro1"');
echo str_replace( $find, $replace, $menu );
?>
Эта печать примерно так:
<a class="pro-link pro1" href="link1">Link1</a>
<a class="pro-link pro1" href="link2">Link2</a>
<a class="pro-link pro1" href="link3">Link3</a>
Проблема в том, что мне нужно поставить 3 разных класса (pro1, pro2 и pro3) и распечатайте так:
<a class="pro-link pro1" href="link1">Link1</a>
<a class="pro-link pro2" href="link2">Link2</a>
<a class="pro-link pro3" href="link3">Link3</a>
Как я могу это сделать? Мне нужно повторить?
Спасибо за вашу помощь! 🙂
ОБНОВИТЬ:
Это работает, но первый элемент печатает только «pro», а следующий «pro1», «pro2». Я пытался изменить значение $ replacecounter но это не работает Мне нужно просто решить это и работать будет отлично.
<?php
$menuParameters = array(
'menu' => '40',
'container' => false,
'echo' => false,
'items_wrap' => '%3$s',
'depth' => 0,
);
$replacecounter = 1;
$menu = strip_tags(wp_nav_menu( $menuParameters ), '<a>' );
echo preg_replace_callback('/<a/', 'replaceCounter', $menu);
function replaceCounter() {
global $replacecounter;
$str="pro-link pro". $replacecounter++;
return "<a class='$str'";
}
?>
Вы можете попробовать это:Нить с помощью preg_replace_callback.На каждом матче replaceCounter
будет вызван и возвращено замененное значение.
$replacecounter = 1;
$str='<a href="link1">Link1</a>
<a href="link2">Link2</a>
<a href="link3">Link3</a>';
echo preg_replace_callback('/<a/', 'replaceCounter', $str);
function replaceCounter() {
global $replacecounter;
$str="pro-link pro". $replacecounter++;
return "<a class='$str'";
}
Я проверил это, и это работает для вашего представленного случая:
$menu="<a href=\"link1\">Link1</a>
<a href=\"link2\">Link2</a>
<a href=\"link3\">Link3</a>
";
$tip="<a href";
$tiplen=strlen($tip);
for($x=1; $x<4; ++$x){
$menu=substr_replace($menu,"<a class=\"pro-link pro$x\" href",strpos($menu,$tip),$tiplen);
}
echo $menu;
или если не всегда 3 ссылки …
$x=0;
$tip="<a href";
$tiplen=strlen($tip);
while(strpos($menu,$tip)!==false){
$menu=substr_replace($menu,"<a class=\"pro-link pro".++$x."\" href",strpos($menu,$tip),$tiplen);
}