我正在使用一个短代码,我需要在输出到dom时将其包装在锚标记中,但它已经包含一个似乎打破代码的锚元素。据我所知,锚元素不应该嵌套,因为这可能会导致意外的结果,并且不是很合乎逻辑。
是否可以在回显到dom之前从短代码中删除锚元素。
我将试着通过一个例子说明这一点,如果不清楚,请原谅我。如果
$shortCode = do_shortcode([example]);
其中[示例]的内容为
<div class="container">
<h1>Heading</h1>
some code here
<a href="http://example/url">Click me</a>
</div>
并且需要将其包装在锚标记
中echo '<a href="http://desired-link-outside-shortcode">'.$shortCode.'</a>';
它应该在html dom中显示如下:
<a href="http://desired-link-outside-shortcode">
<div class="container">
<h1>Heading</h1>
some code here
<a href="http://example/url">Click me</a>
</div>
</a>
然而,当回声时,它似乎在dom中出现:
<a href="http://desired-link-outside-shortcode">
</a>
<div class="container">
<h1>Heading</h1>
some code here
<a href="http://example/url">Click me</a>
</div>
因此我想在回显之前删除所有锚元素。
我试过这个(请原谅测试代码),但是没有按要求工作:
$shortCode = do_shortcode([my_shortcode]);
$startFirstAchor = strpos($shortCode, '<a href');
$endFirstAchor = strpos($shortCode, '</a>') + 4;
$lengthFirst = $endFirstAchor - $startFirstAchor;
$endShortcode = strlen($shortCode);
$lengthSecond = $endShortcode - $endFirstAchor;
$firstPartCode = substr($shortCode, 0, $lengthFirst);
$secondPartCode = substr($shortCode, $endFirstAchor, $lengthSecond);
$refinedShortCode = $firstPartCode . $secondPartCode;
echo $refinedShortCode;
我不是一名php专业人士,所以我们非常感谢帮助或替代方法。
答案 0 :(得分:1)
试试这个:
$dom = new DOMDocument();
$dom->loadHTML(do_shortcode('[my_shortcode]'));
foreach ($dom->getElementsByTagName('a') as $node){
$node->parentNode->removeChild($node);
}
答案 1 :(得分:0)
我最终使用具有绝对定位的锚点覆盖来解决问题。 我改编了How do I overlay an anchor on top of an image using dotnetnuke 的解决方案。