2017-02-20 24 views
0

У меня есть это PHP код для добавления определенного класса <a> элемента в WordPress Menų, прежде чем очистить все другие элементы WordPress:str_replace() с 3-мя различным Заменяет

<?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> 

Как я могу это сделать? Мне нужно повторить?

Благодарим за помощь! :)

UPDATE:

Это работает, но первый пункт печати только "за", а следующий "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'"; 
} 

?> 
+1

Есть ли цикл? –

+0

петли приходят на помощь –

+0

Вы можете поместить его в цикл и сделать 1 в качестве переменной. Для каждой итерации добавляется 1. – Michael

ответ

1

Вы можете попробовать это: Thread используя 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'"; 
} 

DEMO

+0

Спасибо за ваш ответ. Он работает, но первый элемент печатает только «pro», а следующий «pro1», «pro2». Я попытался изменить значение $ replacecounter, но он не работает. Мне нужно просто решить это и будет работать идеально. –

+0

@NachoSarmiento см. Демонстрацию добавила, что она должна работать нормально. Я думаю, вы забыли добавить '$ replacecounter = 1;'. –

+0

Я добавляю обновление в свой код, основанный на вашем ответе. Это код, который я использую сейчас. Пожалуйста, проверьте. Спасибо вам! –

0

Я испытал это, и это работает для представленного случая:

$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); 
}