我正在开发一个带有嵌套子菜单的 wordpress 主题。我需要使没有子元素的元素与有子元素的元素在视觉上有所不同。现在我有这个菜单,但它可能会改变:
A
a1
a2
B
b1
b2
C
如您所见,A 和 B 有 child 。 C 没有 - 我需要它在 CSS 级别上有所不同。
理想情况下,我希望在 A 和 B 中有一个 has-children
类,但在 C 中没有。
到目前为止,我已经成功地创建了一个“Menu Walker”PHP 类,我可以将其实例化并传递给 wp_nav_menu。 .它的构造函数如下所示:
class My_Walker_Nav_Menu extends Walker_Nav_Menu {
function start_el(&$output, $item, $depth, $args) {
...
if(??? $item has children???) {
// I know what to do here
}
}
}
那么,我如何判断 $item
是否有 child ,或者是一片叶子?
编辑:这个问题在 Wordpress 论坛中被一个叫做“keesiemeijer”的人回答了。我要让这个赏金过期,以防他想收回它。否则,我会将自己的答案标记为有效。
最佳答案
将此添加到 functions.php
它将向父级添加“下拉”类
提高性能的新方法
function menu_set_dropdown( $sorted_menu_items, $args ) {
$last_top = 0;
foreach ( $sorted_menu_items as $key => $obj ) {
// it is a top lv item?
if ( 0 == $obj->menu_item_parent ) {
// set the key of the parent
$last_top = $key;
} else {
$sorted_menu_items[$last_top]->classes['dropdown'] = 'dropdown';
}
}
return $sorted_menu_items;
}
add_filter( 'wp_nav_menu_objects', 'menu_set_dropdown', 10, 2 );
旧:密集型数据库
add_filter( 'nav_menu_css_class', 'check_for_submenu', 10, 2);
function check_for_submenu($classes, $item) {
global $wpdb;
$has_children = $wpdb->get_var("SELECT COUNT(meta_id) FROM wp_postmeta WHERE meta_key='_menu_item_menu_item_parent' AND meta_value='".$item->ID."'");
if ($has_children > 0) array_push($classes,'dropdown'); // add the class dropdown to the current list
return $classes;
}
关于php - Wordpress - 我如何知道菜单项是否有子项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8448978/