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 的解决方案
.
我正在使用一个短代码,当输出到 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 的解决方案 .