// 添加一个自定义按钮到菜单页面
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(' ', $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('分类已成功添加到菜单');
});