我正在制作Wordpress主题并且我有一个自定义短代码。短代码包含在一些内容中,其中包含图像。短代码使用DOMDocument来提取图像的src,并使用该URL使其成为新DIV上的背景图像。
以下是相关代码:
//find image src
$html = do_shortcode($content);
$doc = new DOMDocument();
libxml_use_internal_errors(true);
$doc->loadHTML($html, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
$xpath = new DOMXPath($doc);
$src = $xpath->evaluate("string(//img/@src)"); # "/images/image.jpg"
echo '<script>console.log('.'"Source: '.$src.'");</script>';
$overlay_html = '';
foreach($xpath->evaluate("//*[contains(@class, 'sp-img-overlay')]") as $childNode) {
$overlay_html .= $doc->saveHtml($childNode);
}
//removes empty p tags from content
$content = do_shortcode($content);
$content = force_balance_tags($content);
$content = preg_replace('#<p>\s*+(<br\s*/*>)?\s*</p>#i', '', $content);
//removes the actual images and captions
$just_text = $content;
$just_text = preg_replace('#(<figure.*?>).*?(</figure>)#', '', $just_text);
$just_text = preg_replace("/<img[^>]+\>/i", "", $just_text);
//build output
//make src captured earlier the background image.
$output = '<div class="section-pairing full-bleed-mobile">';
$output .= '<div class="section-pairing-img full-bleed-mobile '.$img_side.' '.$values['mobile_img_size'] .'" style=" background-image:url('. $src .')">';
$output .= $overlay_html;
$output .= '</div>';
$output .= '<div class="section-pairing-text '.$text_side.'">';
$output .= $just_text;
$output .= "</div>";
$output .= "</div>";
return $output;
当我在本地开发环境中运行此控制台日志时。 。
echo '<script>console.log('.'"Source: '.$src.'");</script>';
。 。 。返回图像的正确路径,短代码按预期工作。 但是当我迁移到服务器时,页面上的其他所有内容都能正常工作,但是这个短代码不起作用,并且控制台日志会返回&#34;来源:&#34;没有网址,也没有图像。
我是Web开发的新手,对于使用DOMDocument来说真的很陌生,因此任何有关如何完成这项工作的建议都会受到赞赏。
答案 0 :(得分:0)
嘿大家我找到了解决方案。
//find image src
$html = do_shortcode($content);
$doc = new DOMDocument();
libxml_use_internal_errors(true);
$doc->loadHTML($html);
$allImages = $doc->getElementsByTagName('img');
$imgL = $allImages->length;
$bgimg = $allImages->item(0);
$src = $bgimg->getAttribute('src');
密钥似乎是从loadHTML命令中删除“LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD”。我让那些人解决了我之前遇到的一些问题,但现在一切都运转正常。
我还发现了我认为获得src属性的更好方法。