【发布时间】:2013-08-18 21:28:56
【问题描述】:
我正在破解我的 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> 添加到输出的开头,因为</div>s 周围有填充物。
有没有办法让 DOMDocument 忽略那些意外的标签并将它们留在那里,或者我应该使用不同的库?
【问题讨论】:
-
没有 wordpress 专家,但这看起来像是修改主题的错误方法。
-
@Dagon 绝对是。见Child Themes
-
@Phil 这是一个儿童主题。我想将这些内容保留在页脚中,但不会在升级时引起问题。我不想要任何由 Wordpress 提供支持的页脚的痕迹,因为我的网站现在正受到暴力攻击。另外,我希望由 wordpress 提供支持的人说点别的,比如隐私政策的链接。
-
作为参考,那些寻找攻击网站的人...通常不关心页脚中的一些文字。如果他们甚至在网络浏览器中访问您的网站,我会感到惊讶。它们通过某些 URL 可用的某些文件的存在来判断。
-
只需将主题的页脚文件复制到子主题中并修改即可。这个 DOMDocument 废话不值得麻烦;事实上,它甚至更多可能在升级期间中断,因为您现在对文档结构的依赖程度甚至超过从修改后的页脚中吐出一些格式错误的 HTML。
标签: php html wordpress tags domdocument