php - 如何在wordpress中动态制作带有产品类别的菜单

标签 php wordpress woocommerce hook hook-woocommerce

我有一个问题,我可以在WordPress中一键或动态制作带有产品类别的菜单吗 我有很多类别而且制作这个非常耗时
我为此找到了一个插件:

https://awesometogi.com/dynamic-menu-product-categories/

但我不知道这个工作

最佳答案

您可以通过将 WooCommerce 类别强制添加到特定菜单 ID 来使用一些代码来做到这一点。

将此添加到您主题的 functions.php 文件中:

function _custom_nav_menu_item( $title, $url, $order, $parent = 0 ){
  $item = new stdClass();
  $item->ID = 1000000 + $order + $parent;
  $item->db_id = $item->ID;
  $item->title = $title;
  $item->url = $url;
  $item->menu_order = $order;
  $item->menu_item_parent = $parent;
  $item->type = '';
  $item->object = '';
  $item->object_id = '';
  $item->classes = array();
  $item->target = '';
  $item->attr_title = '';
  $item->description = '';
  $item->xfn = '';
  $item->status = '';
  return $item;
}
add_filter("wp_get_nav_menu_items", function ($items, $menu, $args) {
    if( $menu->term_id != 24 ) return $items; // Where 24 is Menu ID, so the code won't affect other menus.

    // don't add child categories in administration of menus
    if (is_admin()) {
        return $items;
    }
    $ctr = ($items[sizeof($items)-1]->ID)+1;
    foreach ($items as $index => $i)
    {
        if ("product_cat" !== $i->object) {
            continue;
        }
        $menu_parent = $i->ID;
        $terms = get_terms( array('taxonomy' => 'product_cat', 'parent'  => $i->object_id ) );
        foreach ($terms as $term) {
            $new_item = _custom_nav_menu_item( $term->name, get_term_link($term), $ctr, $menu_parent );
            $items[] = $new_item;
            $new_id = $new_item->ID;
            $ctr++;
            $terms_child = get_terms( array('taxonomy' => 'product_cat', 'parent'  => $term->term_id ) );
            if(!empty($terms_child))
            {
                foreach ($terms_child as $term_child)
                {
                    $new_child = _custom_nav_menu_item( $term_child->name, get_term_link($term_child), $ctr, $new_id );
                    $items[] = $new_child;
                    $ctr++;
                }
            }
        }
    }

    return $items;
}, 10, 3);

在上面的代码中,请注意 $menu->term_id != 24 部分。然后用您的菜单 ID 更改 24 的值。

上面的代码还将排除空产品类别。

还有一个插件可以做同样的事情,而不仅仅是产品类别:https://wordpress.org/plugins/jc-submenu/

关于php - 如何在wordpress中动态制作带有产品类别的菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58270716/

相关文章:

PHP JSON : print blank page when result is empty

javascript - 手动在autoptimize插件中加载JS

mysql - 导入mysql出错,意外字符(mariaDB)

php - 仅在 WooCommerce 我的帐户仪表板中添加自定义 html 内容

php - 在 MVC 框架中构建模型?

php - 如何在对象中的数组中询问某些对象

php - 如何使用 php 查找特定字符以从字符串创建数组

css - Wordpress 标题 CSS 问题

php - 在 Woocommerce 管理订单编辑页面中以编程方式添加自定义订单备注

javascript - 在 Woocommerce 的 Adword 转换代码中添加订单数据