Wordpress - 我如何知道菜单项是否有子项?

2022-08-30 14:22:52

我正在开发一个带有嵌套子菜单的wordpress主题。我需要使没有孩子的元素在视觉上与有孩子的元素不同。现在我有这个菜单,但这可能会改变:

A
  a1
  a2
B
  b1
  b2
C

如您所见,A和B有孩子。C没有 - 我需要它在CSS级别上有所不同。

理想情况下,我希望在A和B中有一个类,但不在C中。has-children

到目前为止,我已经设法创建了一个“菜单步行者”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

编辑:这个问题是由Wordpress论坛中名为“keesiemeijer”的人回答的。我让这个赏金过期,以防他想收回它。否则,我会将自己的答案标记为有效。


答案 1

将其添加到将“下拉列表”类添加到父级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;
}

答案 2

简单你用这种方式:

解释:我用“步行者”创建菜单:

$walker = new Nav_Walker;
wp_nav_menu(array(
        'container'=>'nav',
        'container_class'=>'menu',
        'menu_class'=>'list-unstyled list-inline',
        'walker'=>$walker
    ));

沃克班:

class Nav_Walker extends Walker_Nav_Menu
{ 
      public function start_el(&$output, $item, $depth = 0, $args = array(), $id = 0)
    {
        if($args->walker->has_children)
        {
            //code...
        }   
    }
}

我们有对象“步行者”,你可以var_dump($args)看到更多的东西。我正在为我的项目使用!


推荐