0

我有点破解我的 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>s 并使页面看起来很奇怪。我不能只添加</div></div>到输出的开头,因为 s 周围有填充物</div>

有没有办法让 DOMDocument 忽略那些意外的标签并将它们留在那里,或者我应该使用不同的库?

4

1 回答 1

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;
?>
于 2013-08-19T21:12:19.590 回答