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

标签 php wordpress

我正在开发一个带有嵌套子菜单的 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/

相关文章:

php - 如何在提交表单时触发另一个表单。?

php - 提交表单时出错

php - 使用带 [[ :<:]] [[:>:]] 的 REGEXP 在 CodeIgniter 上查询时出错

php - preg_match 在搜索转义引号时返回 null

php - 如何使用 WP 中的任何 jQuery 缩放插件缩放附加图像?

php - 使用 mysql 和 php 进入文本区域并返回的脚本

javascript - jquery代码有时工作有时没有

mysql - WordPress mysql 查询不显示结果?

wordpress - 在 WooCommerce 3.3 中更改产品缩略图大小

php - Ajax 调用 php 脚本返回 404 错误