当前位置: 首页 > 知识库问答 >
问题:

从WordPress菜单中隐藏空产品类别

莫宝
2023-03-14

基于在Wordpress菜单中按名称ASC对上一个问题的答案代码中的产品类别子菜单项进行排序,我能够在Wordpress导航菜单中自动将子类别显示为某些产品类别的菜单子项。

我的问题是:是否可以隐藏空的子类别(子菜单项)?

如果可能的话,还可以隐藏只包含一个已售完产品的类别。

共有2个答案

郭凡
2023-03-14

您可以使用get_terms(),在这里可以指定更多选项,以便

get_term_children( $post->object_id, $taxonomy );

将成为

get_terms(array(
  'taxonomy' => $taxonomy,
  'parent' => $post->object_id,
  'hide_empty' => true,
));

这也有一个order_by参数,默认为术语的名称

东郭远航
2023-03-14

您还可以对以下参数使用get_terms()

  • '包括'以包括中的所有子项get_term_children()函数作为一个分离的词id字符串。
  • 'orderby''name'属性按名称排序术语,
  • 'order'与'ASC'属性排序术语升序,
  • 'hide_empty'true属性不包括空术语。

因此,排序将直接进行,而不需要foreach循环,您还将直接获得WP_Term对象的数组

重新访问的代码:

add_filter( 'wp_get_nav_menu_items', 'custom_submenu_product_categories', 10, 3 );
function custom_submenu_product_categories( $items, $menu, $args ) {
    // don't add child categories in administration of menus
    if (is_admin()) {
        return $items;
    }

    $taxonomy = 'product_cat';

    foreach ($items as $index => $post) {

        if ( $taxonomy !== $post->object ) {
            continue;
        }

        $children_terms_ids = get_term_children( $post->object_id, $taxonomy );

        if( ! empty($children_terms_ids) ) {
            $sorted_terms       = get_terms(array(
                'taxonomy'   => $taxonomy,
                'include'    => implode(',', $children_terms_ids),
                'orderby'    => 'name',
                'order'      => 'ASC',
                'hide_empty' => true,
            ));

            // Loop through sorted child terms to set them as sorted sub menu items
            foreach ( $sorted_terms as $index2 => $child_term ) {
                $item = new \stdClass();

                $item->title            = $child_term->name;
                $item->url              = get_term_link( $child_term, $taxonomy );
                $item->menu_order       = 500 * ($index + 1) + $index2;
                $item->post_type        = 'nav_menu_item';
                $item->post_status      = 'published';
                $item->post_parent      = $post->ID;
                $item->menu_item_parent = $post->ID;
                $item->type             = 'custom';
                $item->object           = 'custom';
                $item->description      = '';
                $item->object_id        = 0;
                $item->db_id            = 0;
                $item->ID               = 0;
                $item->position         = 0;
                $item->classes          = array();
                $item->target           = ''; // <= Missing - Mandatory to avoid an error
                $item->xfn              = ''; // <= Missing - Mandatory to avoid an error

                $items[] = $item;
            }
        }
    }
    return $items;
}

代码functions.php活动子主题(或活动主题)的文件中。测试和工作。

很抱歉,现在无法隐藏仅包含一个已售完产品的子类别。

 类似资料:
  • 我需要在主页上隐藏我的菜单,让它在向下滚动时出现。我正在使用Wordpress和Elementor。我能够通过安装“自定义CSS&JS”插件来实现这一点,它允许我添加任何我需要的JS代码。 我使用elementor自定义CSS在菜单部分添加了以下代码: null null 然后我用我安装的插件将这个Java脚本添加到我的网站上, null null 这做了工作,但现在菜单是隐藏在所有网页上的网站和

  • 我试图通过WoodPress主题中的一个函数从WooCommerce获取产品类别 上面的代码返回一些产品,但是产品类别。 当我包括

  • 最近我在我的网站上安装了两个插件。插件生成两个管理菜单。我想把菜单藏起来。 菜单名为: WP Metaboxer鼠标悬停链接(mysite.com/WP admin/edit.php?post_type=mtbxr_metabox) BWS插件鼠标悬停链接(mysite.com/wp-admin/admin.php?page=bws_plugins) 我可以通过这些代码隐藏其他默认菜单

  • 我刚刚把我的超文本标记语言转换成WordPress。你可以在这里看到。我选择了每页显示一篇文章。 但是,我注意到我没有'Previous'链接和div。我现在只有'Next'链接和div。 如果我添加了'Previous'链接和div,我如何在我的主页中隐藏它(这里有最新的条目)?我如何在最后一个条目中隐藏“下一个”链接和div,而在最后一个条目页面中只显示“上一个”链接和div? 我想这个主题更

  • 所以我想做的是让我的主菜单浮动,但同时是可调整大小的(窗口宽度),我也有一个隐藏的子菜单,我希望它遵循主菜单的规则。 此外,主菜单并不是从页面的顶部开始,但当你向下滚动时,我希望它能贴在顶部边缘并在那里Rest。 jsFiddle在这里 CSS JAVASCRIPT(jQuery的什么版本?) HTML(固定HTML格式,删除额外标记,添加缺失标记)

  • 我有一个带有MenuItem的操作条。如何隐藏/显示该菜单项? 这就是我要做的: