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

时间:2017-09-13 08:28:39

标签: php html wordpress shortcode

我正在使用一个短代码,我需要在输出到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专业人士,所以我们非常感谢帮助或替代方法。

2 个答案:

答案 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 的解决方案。