PHP在回显之前从短代码中删除锚元素
我正在使用一个短代码,当输出到dom时,我需要将它包装在一个锚标记中,但是它已经包含一个锚元素,这似乎破坏了代码。据我所知,锚元素不应该嵌套,因为这会导致意外的结果,而且逻辑性不强 在回显到dom之前,是否可以从短代码中删除锚元素。 我将尝试用一个例子来说明这一点,如果不清楚,请原谅。如果PHP在回显之前从短代码中删除锚元素,php,html,wordpress,shortcode,Php,Html,Wordpress,Shortcode,我正在使用一个短代码,当输出到dom时,我需要将它包装在一个锚标记中,但是它已经包含一个锚元素,这似乎破坏了代码。据我所知,锚元素不应该嵌套,因为这会导致意外的结果,而且逻辑性不强 在回显到dom之前,是否可以从短代码中删除锚元素。 我将尝试用一个例子来说明这一点,如果不清楚,请原谅。如果 $shortCode=do_shortCode([示例])其中[示例]的内容为 <div class="container"> <h1>Heading</h1> s
$shortCode=do_shortCode([示例])代码>其中[示例]的内容为
<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>';
echo';
它应该在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>
但是,当echo'ed出现在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;
$shortCode=do_shortCode([my_shortCode]);
$startFirstAchor=strpos($shortCode,试试这个:
$dom = new DOMDocument();
$dom->loadHTML(do_shortcode('[my_shortcode]'));
foreach ($dom->getElementsByTagName('a') as $node){
$node->parentNode->removeChild($node);
}
我最终使用了一个绝对定位的锚覆盖来解决这个问题。
我从中改编了解决方案。为什么不使用WPsdo_shortcode
中的结果锚?检查此链接,我认为它对您很有帮助。谢谢。这成功地删除了锚元素,但是dom仍在使用锚元素分析短代码。对于其他人,请注意echo$dom->saveHTML();
也是必需的。