我有点乱砍我的WordPress主题页脚,我发现了一个小问题。
我正在做的是获取父主题的页脚,捕获输出,并使用DOMDocument修改元素。这是我的代码:
<?php
// I apologize in advance for my messy code....
/**
* JavaScript-like HTML DOM Element
*
* This class extends PHP's DOMElement to allow
* users to get and set the innerHTML property of lalalalala....
*
* @author Keyvan Minoukadeh - http://www.keyvan.net - keyvan@keyvan.net
* @see http://fivefilters.org (the project this was written for)
*/
// blahblahblah
ob_start();
require get_theme_root() . '/responsive/footer.php';
$output = ob_get_clean();
libxml_use_internal_errors(true);
$dom = new DOMDocument();
$dom->registerNodeClass('DOMElement', 'JSLikeHTMLElement');
$dom->loadHTML($output);
$finder = new DomXPath($dom);
$classname="powered";
$nodes = $finder->query("//*[contains(concat(' ', normalize-space(@class), ' '), ' $classname ')]");
$elem = $nodes->item(0);
$elem->innerHTML = "hahaha..gotcha!";
echo $dom->saveHTML();
?>
但是,页脚输出包含两个</div>
s(意外的结束标记),这使得DOMDocument抱怨。实际上,它只是摆脱了那些</div>
并使页面看起来很奇怪。我无法将</div></div>
添加到输出的开头,因为</div>
周围有填充。
有没有办法让DOMDocument忽略那些意外的标签并将它们留在那里或者我应该使用不同的库?
答案 0 :(得分:2)
我找到了解决方案!
我没有使用PHP的DOMDocument,而是使用了Simple HTML DOM库。这并没有抱怨错误,甚至减少了代码量!
<?php
// Simple HTML DOM Parser
require (get_stylesheet_directory() . '/core/includes/simple_html_dom.php');
ob_start();
require (get_theme_root() . '/responsive/footer.php');
$outputhtml = str_get_html(ob_get_clean());
$outputhtml->find("div.powered", 0)->innertext = "<a href='/privacy-policy'>Privacy</a>";
echo $outputhtml;
?>