我在 WP 的 debug.log 文件中收到以下错误。
PHP 注意:未定义的属性:DOMDocument::$tagName in .../wp-content/themes/theme-name/libs/oi/functions.php on line 441
PHP 注意:尝试在第 441 行的 .../wp-content/themes/theme-name/libs/oi/functions.php 中获取非对象的属性
function oi_display_hierarchy( $nav_menu, $args )
{
if( ! is_single() )
{
return $nav_menu;
}
$menuXML = new SimpleXMLElement( $nav_menu );
list($current) = $menuXML->xpath( "//li[contains(@class,'current-menu-parent')]" );
if( !empty( $current ) )
{
$node = dom_import_simplexml($current);
while($node)
{
$node = $node->parentNode;
if( $node->tagName == 'li' ) // 441 - The problem line
{
$classes = $node->getAttribute('class');
$node->setAttribute('class', $classes . ' current-menu-ancestor current-menu-parent current_page_parent current_page_ancestor');
}
}
}
return str_replace('<?xml version="1.0"?>', '', $menuXML->asXML());
}
add_filter('wp_nav_menu', 'oi_display_hierarchy', 11, 2);
任何想法可能是这里的问题?
最佳答案
您正在尝试获取当前 DOMElement
上一行的对象父节点:
$node = $node->parentNode;
所以在那之后
$node
将更改为 DOMNode
( DOMElement
继承 DOMNode
)。 tagName
属性不是 DOMNode
定义的一部分,它特定于 DOMElement
- 这就是它抛出错误的原因。xml 中的所有内容都是一个节点 - 文本、行、注释...所以
DOMNode
可以 一个标签,但它也可以是其他东西。因此,我们需要使用以下内容检查节点的类型:if($node->nodeType == XML_ELEMENT_NODE) { // Node is a DOMElement
这样我们就可以确定 $node 是
DOMElement
,然后可以安全使用 tagName
属性(property)。
关于php - 未定义的属性:DOMDocument::$tagName,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32627939/