<?php
$html = <<<HTML
<body>
<div>foo</div>
<shortcode type="content" />
<div>bar</div>
</body>
HTML;
$replace = <<<HTML
<div>content</div>
HTML;
$dom = new DOMDocument();
libxml_use_internal_errors(true);
$dom->loadHTML($html, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
echo $dom->saveHTML($dom->documentElement);
echo PHP_EOL, '---------------------------', PHP_EOL;
$xpath = new DOMXPath($dom);
$nodes = $xpath->query('//shortcode');
foreach($nodes as $node) {
$newHTML = $dom->createDocumentFragment();
$newHTML->appendXML($replace);
$node->parentNode->insertBefore($newHTML, $node);
$node->parentNode->removeChild($node);
}
echo $dom->saveHTML($dom->documentElement);
- Output for 7.2.0 - 7.2.33, 7.3.0 - 7.3.33, 7.4.0 - 7.4.33, 8.0.0 - 8.0.30, 8.1.0 - 8.1.33, 8.2.0 - 8.2.29, 8.3.0 - 8.3.25, 8.4.1 - 8.4.13
- <body>
<div>foo</div>
<shortcode type="content"></shortcode>
<div>bar</div>
</body>
---------------------------
<body>
<div>foo</div>
<div>content</div>
<div>bar</div>
</body>
preferences:
118.2 ms | 407 KiB | 5 Q