一键添加所有产品分类到wordpress的产品目录 直接获取产品分类的层级关系来构建菜单

// 添加一个自定义按钮到菜单页面
add_action('admin_footer-nav-menus.php', function() {
    ?>
    <script type="text/javascript">
    jQuery(document).ready(function($) {
        // 添加自定义按钮
        var button = $('<a href="#" class="button-secondary" style="margin: 10px;">一键添加所有产品分类</a>');
        $('.menu-settings').before(button);

        button.on('click', function(e) {
            e.preventDefault();
            
            // 显示加载状态
            button.text('正在添加...').prop('disabled', true);
            
            // 发送Ajax请求
            $.ajax({
                url: ajaxurl,
                type: 'POST',
                data: {
                    action: 'add_product_categories_to_menu',
                    menu_id: $('#menu').val(),
                    nonce: '<?php echo wp_create_nonce("add-product-cats"); ?>'
                },
                success: function(response) {
                    if(response.success) {
                        // 刷新页面显示新添加的菜单项
                        window.location.reload();
                    } else {
                        alert('添加失败: ' + response.data);
                    }
                },
                error: function() {
                    alert('操作失败,请重试');
                    button.text('一键添加所有产品分类').prop('disabled', false);
                }
            });
        });
    });
    </script>
    <?php
});

// 处理Ajax请求
add_action('wp_ajax_add_product_categories_to_menu', function() {
    // 验证nonce
    if (!isset($_POST['nonce']) || !wp_verify_nonce($_POST['nonce'], 'add-product-cats')) {
        wp_send_json_error('安全验证失败');
    }

    // 获取菜单ID
    $menu_id = intval($_POST['menu_id']);
    if (!$menu_id) {
        wp_send_json_error('无效的菜单ID');
    }

    // 获取所有产品分类
    $categories = get_terms([
        'taxonomy' => 'product_cat',
        'hide_empty' => false,
        'hierarchical' => true,
        'parent' => 0
    ]);

    if (is_wp_error($categories)) {
        wp_send_json_error('获取分类失败');
    }

    // 递归添加分类到菜单
    function add_category_to_menu($category, $menu_id, $parent_id = 0) {
        // 添加当前分类
        $item_data = [
            'menu-item-title' => $category->name,
            'menu-item-url' => get_term_link($category),
            'menu-item-type' => 'taxonomy',
            'menu-item-object' => 'product_cat',
            'menu-item-object-id' => $category->term_id,
            'menu-item-status' => 'publish',
            'menu-item-parent-id' => $parent_id
        ];

        $item_id = wp_update_nav_menu_item($menu_id, 0, $item_data);

        // 获取并添加子分类
        $children = get_terms([
            'taxonomy' => 'product_cat',
            'hide_empty' => false,
            'hierarchical' => true,
            'parent' => $category->term_id
        ]);

        if (!is_wp_error($children) && !empty($children)) {
            foreach ($children as $child) {
                add_category_to_menu($child, $menu_id, $item_id);
            }
        }

        return $item_id;
    }

    // 添加所有一级分类及其子分类
    foreach ($categories as $category) {
        add_category_to_menu($category, $menu_id);
    }

    wp_send_json_success('分类已成功添加到菜单');
});

这个解决方案的特点:在菜单编辑页面添加一个”一键添加所有产品分类”按钮

点击按钮后会:

  • 获取所有产品分类
  • 保持正确的层级关系
  • 自动添加到当前选中的菜单中

分类会按照以下规则添加:

  • 一级分类直接添加到菜单根目录
  • 二级分类作为一级分类的子菜单
  • 三级分类作为二级分类的子菜单

保持原有的分类层级关系

自动创建正确的菜单结构

使用方法:

  • 将代码添加到您的主题的functions.php文件中
  • 在菜单编辑页面,您会看到一个新的按钮
  • 选择要添加到的菜单点击按钮,等待处理完成
  • 页面会自动刷新,显示新添加的菜单项

下面的代码是可以添加到指定菜单目录下:

// 添加一个自定义按钮和选择框到菜单页面
add_action('admin_footer-nav-menus.php', function() {
    ?>
    <div id="add-product-cats-modal" style="display:none; position:fixed; top:50%; left:50%; transform:translate(-50%,-50%); 
        background:#fff; padding:20px; border:1px solid #ccc; box-shadow:0 0 10px rgba(0,0,0,0.2); z-index:9999;">
        <h3 style="margin-top:0;">选择目标菜单项</h3>
        <select id="parent-menu-item" style="width:100%; margin:10px 0;">
            <option value="0">作为顶级菜单项</option>
            <?php
            $menu_id = isset($_GET['menu']) ? (int)$_GET['menu'] : 0;
            if ($menu_id) {
                $menu_items = wp_get_nav_menu_items($menu_id);
                if ($menu_items) {
                    foreach ($menu_items as $item) {
                        echo sprintf(
                            '<option value="%d">%s%s</option>',
                            $item->ID,
                            str_repeat('&nbsp;&nbsp;&nbsp;', $item->menu_item_parent ? 1 : 0),
                            esc_html($item->title)
                        );
                    }
                }
            }
            ?>
        </select>
        <div style="text-align:right; margin-top:15px;">
            <button class="button-secondary" onclick="jQuery('#add-product-cats-modal').hide();">取消</button>
            <button class="button-primary" id="confirm-add-cats">确认添加</button>
        </div>
    </div>

    <script type="text/javascript">
    jQuery(document).ready(function($) {
        // 添加自定义按钮
        var button = $('<a href="#" class="button-secondary" style="margin: 10px;">批量添加产品分类</a>');
        $('.menu-settings').before(button);

        button.on('click', function(e) {
            e.preventDefault();
            $('#add-product-cats-modal').show();
        });

        $('#confirm-add-cats').on('click', function() {
            var parentId = $('#parent-menu-item').val();
            var $btn = $(this);
            
            // 显示加载状态
            $btn.prop('disabled', true).text('正在添加...');
            
            // 发送Ajax请求
            $.ajax({
                url: ajaxurl,
                type: 'POST',
                data: {
                    action: 'add_product_categories_to_menu',
                    menu_id: $('#menu').val(),
                    parent_id: parentId,
                    nonce: '<?php echo wp_create_nonce("add-product-cats"); ?>'
                },
                success: function(response) {
                    if(response.success) {
                        window.location.reload();
                    } else {
                        alert('添加失败: ' + response.data);
                        $btn.prop('disabled', false).text('确认添加');
                    }
                },
                error: function() {
                    alert('操作失败,请重试');
                    $btn.prop('disabled', false).text('确认添加');
                }
            });
        });
    });
    </script>
    <?php
});

// 处理Ajax请求
add_action('wp_ajax_add_product_categories_to_menu', function() {
    // 验证nonce
    if (!isset($_POST['nonce']) || !wp_verify_nonce($_POST['nonce'], 'add-product-cats')) {
        wp_send_json_error('安全验证失败');
    }

    // 获取菜单ID和父菜单项ID
    $menu_id = intval($_POST['menu_id']);
    $parent_menu_id = intval($_POST['parent_id']);
    
    if (!$menu_id) {
        wp_send_json_error('无效的菜单ID');
    }

    // 获取所有产品分类
    $categories = get_terms([
        'taxonomy' => 'product_cat',
        'hide_empty' => false,
        'hierarchical' => true,
        'parent' => 0
    ]);

    if (is_wp_error($categories)) {
        wp_send_json_error('获取分类失败');
    }

    // 递归添加分类到菜单
    function add_category_to_menu($category, $menu_id, $parent_menu_id) {
        // 添加当前分类
        $item_data = [
            'menu-item-title' => $category->name,
            'menu-item-url' => get_term_link($category),
            'menu-item-type' => 'taxonomy',
            'menu-item-object' => 'product_cat',
            'menu-item-object-id' => $category->term_id,
            'menu-item-status' => 'publish',
            'menu-item-parent-id' => $parent_menu_id
        ];

        $item_id = wp_update_nav_menu_item($menu_id, 0, $item_data);

        // 获取并添加子分类
        $children = get_terms([
            'taxonomy' => 'product_cat',
            'hide_empty' => false,
            'hierarchical' => true,
            'parent' => $category->term_id
        ]);

        if (!is_wp_error($children) && !empty($children)) {
            foreach ($children as $child) {
                add_category_to_menu($child, $menu_id, $item_id);
            }
        }

        return $item_id;
    }

    // 添加所有一级分类及其子分类
    foreach ($categories as $category) {
        add_category_to_menu($category, $menu_id, $parent_menu_id);
    }

    wp_send_json_success('分类已成功添加到菜单');
});

By 行政