Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP在回显之前从短代码中删除锚元素_Php_Html_Wordpress_Shortcode - Fatal编程技术网

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

PHP在回显之前从短代码中删除锚元素,php,html,wordpress,shortcode,Php,Html,Wordpress,Shortcode,我正在使用一个短代码,当输出到dom时,我需要将它包装在一个锚标记中,但是它已经包含一个锚元素,这似乎破坏了代码。据我所知,锚元素不应该嵌套,因为这会导致意外的结果,而且逻辑性不强 在回显到dom之前,是否可以从短代码中删除锚元素。 我将尝试用一个例子来说明这一点,如果不清楚,请原谅。如果 $shortCode=do_shortCode([示例])其中[示例]的内容为 <div class="container"> <h1>Heading</h1> s

我正在使用一个短代码,当输出到dom时,我需要将它包装在一个锚标记中,但是它已经包含一个锚元素,这似乎破坏了代码。据我所知,锚元素不应该嵌套,因为这会导致意外的结果,而且逻辑性不强

在回显到dom之前,是否可以从短代码中删除锚元素。 我将尝试用一个例子来说明这一点,如果不清楚,请原谅。如果
$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);
}

我最终使用了一个绝对定位的锚覆盖来解决这个问题。
我从中改编了解决方案。

为什么不使用WPs
do_shortcode
中的结果锚?检查此链接,我认为它对您很有帮助。谢谢。这成功地删除了锚元素,但是dom仍在使用锚元素分析短代码。对于其他人,请注意
echo$dom->saveHTML();
也是必需的。