PHP 在回显之前从短代码中删除锚元素

PHP remove anchor elements from shortcode before echoing

我正在使用一个短代码,当输出到 dom 时我需要将其包裹在一个锚标记中,但是它已经包含一个似乎破坏代码的锚元素。据我了解,不应嵌套锚元素,因为这可能会导致意外结果并且不太合逻辑。

是否可以在回显到 dom 之前从短代码中删除锚元素。 我将尝试用一个例子来说明这一点,如果不清楚,请原谅。如果 $shortCode = do_shortcode([example]); 其中 [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 专业人士,因此非常感谢帮助或替代方法来实现这一目标。

试试这个:

$dom = new DOMDocument();
$dom->loadHTML(do_shortcode('[my_shortcode]'));

foreach ($dom->getElementsByTagName('a') as $node){
    $node->parentNode->removeChild($node);
}

我最终使用具有绝对定位的锚覆盖来解决问题。 我改编了 How do I overlay an an an image top of an image using dotnetnuke 的解决方案 .