我有这个PHP代码,用于在WordPress中为<a>
元素添加一个特定的类,然后从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'";
}
?>
答案 0 :(得分: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'";
}
答案 1 :(得分: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);
}