feat(admin): expose shop/forum CPTs on native WP sidebar (Phase 0–1)

Align admin ops entry with zibll: product/plate/topic menus and taxonomies
show in the WordPress sidebar when shop_s/bbs_s are enabled, gated by
AKSRT_Settings. Add IA map + gap matrix docs for the full native-ops
migration path. SPA ops pages remain until Phase 2–3 native pages ship.
This commit is contained in:
kate522 committed 2026-07-15 01:00:10 +08:00
1 parent 87004ecfe0
commit 50ca5a6593
6 files changed
+388 -60

No files matched your search

+26 -12
View File
@@ -121,10 +121,20 @@ class AKSRT_Setup {
$product_slug = sanitize_key((string) ($shop_rewrite['product_slug'] ?? 'product'));
$suffix_html = !empty($shop_rewrite['suffix_html']);
// 商品 CPT
// Shop admin visibility: align with zibll native sidebar when shop is enabled.
$shop_enabled = true;
if (class_exists('AKSRT_Settings')) {
$shop_settings = AKSRT_Settings::get_shop_settings();
$shop_enabled = !empty($shop_settings['enabled']);
}
// Always register UI in admin so settings/tools remain reachable; hide menu when disabled.
$shop_show_ui = true;
$shop_show_menu = is_admin() ? $shop_enabled : false;
// 商品 CPT — native WP sidebar (zibll: shop_product @ pos 35)
register_post_type('aksrt_product', [
'labels' => [
'name' => __('商品', 'aksrt'),
'name' => __('商城', 'aksrt'),
'singular_name' => __('商品', 'aksrt'),
'add_new' => __('新增商品', 'aksrt'),
'add_new_item' => __('新增商品', 'aksrt'),
@@ -134,15 +144,18 @@ class AKSRT_Setup {
'search_items' => __('搜索商品', 'aksrt'),
'not_found' => __('未找到商品', 'aksrt'),
'not_found_in_trash' => __('回收站中无商品', 'aksrt'),
'menu_name' => __('商品', 'aksrt'),
'all_items' => __('所有商品', 'aksrt'),
'menu_name' => __('商城', 'aksrt'),
],
'public' => true,
'publicly_queryable' => true,
'show_ui' => true,
'show_in_menu' => false,
'show_ui' => $shop_show_ui,
'show_in_menu' => $shop_show_menu,
'show_in_rest' => true,
'has_archive' => true,
'hierarchical' => false,
'menu_position' => 35,
'menu_icon' => 'dashicons-store',
'supports' => ['title', 'editor', 'excerpt', 'thumbnail', 'author', 'revisions'],
'rewrite' => ['slug' => $product_slug, 'with_front' => false],
'capability_type' => 'post',
@@ -163,9 +176,10 @@ class AKSRT_Setup {
],
'public' => true,
'hierarchical' => true,
'show_ui' => false,
'show_ui' => $shop_show_ui,
'show_in_menu' => $shop_show_menu,
'show_in_rest' => true,
'show_admin_column' => false,
'show_admin_column' => true,
'rewrite' => ['slug' => 'product-cat', 'with_front' => false],
]);
@@ -178,15 +192,15 @@ class AKSRT_Setup {
'all_items' => __('所有商品标签', 'aksrt'),
'edit_item' => __('编辑标签', 'aksrt'),
'add_new_item' => __('新增标签', 'aksrt'),
'menu_name' => __('商品标签', 'aksrt'),
'menu_name' => __('特色标签', 'aksrt'),
],
'public' => true,
'hierarchical' => false,
'show_ui' => false,
'show_ui' => $shop_show_ui,
'show_in_menu' => $shop_show_menu,
'show_in_rest' => true,
'show_admin_column' => false,
'rewrite' => ['slug' => 'product-tag', 'with_front' => false,
],
'show_admin_column' => true,
'rewrite' => ['slug' => 'product-tag', 'with_front' => false],
]);
// 项目展示
+11 -2
View File
@@ -45,6 +45,14 @@ class AKSRT_Shop_Term_Meta {
return;
}
$shop_enabled = true;
if (class_exists('AKSRT_Settings')) {
$shop_settings = AKSRT_Settings::get_shop_settings();
$shop_enabled = !empty($shop_settings['enabled']);
}
$shop_show_ui = true;
$shop_show_menu = is_admin() ? $shop_enabled : false;
register_taxonomy('shop_discount', 'aksrt_product', [
'labels' => [
'name' => __('优惠活动', 'aksrt'),
@@ -57,9 +65,10 @@ class AKSRT_Shop_Term_Meta {
],
'public' => true,
'hierarchical' => false,
'show_ui' => false,
'show_ui' => $shop_show_ui,
'show_in_menu' => $shop_show_menu,
'show_in_rest' => true,
'show_admin_column' => false,
'show_admin_column' => true,
'rewrite' => ['slug' => 'shop-discount', 'with_front' => false],
]);
}
@@ -5,7 +5,7 @@ trait AKSRT_Setup_Part_2 {
/**
* 隐藏默认WordPress菜单项目
* 隐藏默认WordPress菜单项目 + zibll 风格运营菜单分隔线
*/
public function hide_default_menus(): void {
// 移除评论默认菜单(已移除该操作以恢复 Comments 菜单)
@@ -13,10 +13,22 @@ trait AKSRT_Setup_Part_2 {
// 移除链接管理(已废弃但仍可能存在)
//remove_menu_page('link-manager.php');
// 移除仪表盘中的不必要组件
remove_meta_box('dashboard_primary', 'dashboard', 'normal');
remove_meta_box('dashboard_quick_press', 'dashboard', 'side');
// Separators around shop (35) and forum (40) — match zibll admin_menu_separator.
global $menu;
if (!is_array($menu)) {
return;
}
if (!isset($menu[34])) {
$menu[34] = ['', 'read', 'separator-aksrt-shop', '', 'wp-menu-separator'];
}
if (!isset($menu[39])) {
$menu[39] = ['', 'read', 'separator-aksrt-forum', '', 'wp-menu-separator'];
}
}
/**
+82 -44
View File
@@ -92,16 +92,25 @@ function aksrt_register_forum_cpt() {
}
}
// Read custom slugs from settings when available
$plate_slug = 'board';
$topic_slug = 'topic';
// Read custom slugs / names from settings when available
$plate_slug = 'board';
$topic_slug = 'topic';
$forum_enabled = true;
$forum_settings = [];
if (class_exists('AKSRT_Settings')) {
$forum = AKSRT_Settings::get_forum_settings();
$plate_slug = !empty($forum['other']['plate_slug']) ? $forum['other']['plate_slug'] : 'board';
$topic_slug = !empty($forum['other']['posts_slug']) ? $forum['other']['posts_slug'] : 'topic';
$forum_settings = AKSRT_Settings::get_forum_settings();
$plate_slug = !empty($forum_settings['other']['plate_slug']) ? $forum_settings['other']['plate_slug'] : 'board';
$topic_slug = !empty($forum_settings['other']['posts_slug']) ? $forum_settings['other']['posts_slug'] : 'topic';
$forum_enabled = !empty($forum_settings['enabled']);
}
// Forum Board taxonomy
// Admin always registers types; menu follows bbs_s (zibll: show when forum on).
$forum_show_menu = is_admin() ? $forum_enabled : false;
$names = !empty($forum_settings['names']) ? $forum_settings['names'] : [];
$forum_label = sanitize_text_field((string) ($names['forum'] ?? __('论坛', 'aksrt')));
$posts_label = sanitize_text_field((string) ($names['posts'] ?? __('帖子', 'aksrt')));
$topic_label = sanitize_text_field((string) ($names['topic'] ?? __('话题', 'aksrt')));
$tag_label = sanitize_text_field((string) ($names['tag'] ?? __('标签', 'aksrt')));
// Legacy board taxonomy: keep rewrite/bridge, hide from admin (plate CPT is canonical).
register_taxonomy('aksrt_forum_board', 'aksrt_forum_topic', [
'labels' => [
'name' => __('论坛版块', 'aksrt'),
@@ -113,58 +122,72 @@ function aksrt_register_forum_cpt() {
],
'hierarchical' => true,
'public' => true,
'show_ui' => false,
'show_in_menu' => false,
'show_in_rest' => true,
'show_admin_column' => true,
'show_admin_column' => false,
'rewrite' => ['slug' => $plate_slug],
]);
// Forum Tag taxonomy
register_taxonomy('aksrt_forum_tag', 'aksrt_forum_topic', [
'labels' => [
'name' => __('论坛标签', 'aksrt'),
'singular_name' => __('标签', 'aksrt'),
'search_items' => __('搜索标签', 'aksrt'),
'all_items' => __('所有标签', 'aksrt'),
'edit_item' => __('编辑标签', 'aksrt'),
'add_new_item' => __('添加标签', 'aksrt'),
'name' => sprintf(/* translators: %s: forum name */ __('%s标签', 'aksrt'), $forum_label),
'singular_name' => $tag_label,
'search_items' => sprintf(/* translators: %s: tag name */ __('搜索%s', 'aksrt'), $tag_label),
'all_items' => sprintf(/* translators: %s: tag name */ __('所有%s', 'aksrt'), $tag_label),
'edit_item' => sprintf(/* translators: %s: tag name */ __('编辑%s', 'aksrt'), $tag_label),
'add_new_item' => sprintf(/* translators: %s: tag name */ __('添加%s', 'aksrt'), $tag_label),
'menu_name' => $tag_label,
],
'hierarchical' => false,
'public' => true,
'show_ui' => true,
'show_in_menu' => $forum_show_menu,
'show_in_rest' => true,
'show_admin_column' => false,
'show_admin_column' => true,
'rewrite' => ['slug' => 'forum-tag'],
]);
// Forum Topic taxonomy (话题,单选,区别于标签)
register_taxonomy('aksrt_forum_topic_cat', 'aksrt_forum_topic', [
'labels' => [
'name' => __('论坛话题', 'aksrt'),
'singular_name' => __('话题', 'aksrt'),
'search_items' => __('搜索话题', 'aksrt'),
'all_items' => __('所有话题', 'aksrt'),
'edit_item' => __('编辑话题', 'aksrt'),
'add_new_item' => __('添加话题', 'aksrt'),
'name' => sprintf(/* translators: %s: forum name */ __('%s话题', 'aksrt'), $forum_label),
'singular_name' => $topic_label,
'search_items' => sprintf(/* translators: %s: topic name */ __('搜索%s', 'aksrt'), $topic_label),
'all_items' => sprintf(/* translators: %s: topic name */ __('所有%s', 'aksrt'), $topic_label),
'edit_item' => sprintf(/* translators: %s: topic name */ __('编辑%s', 'aksrt'), $topic_label),
'add_new_item' => sprintf(/* translators: %s: topic name */ __('添加%s', 'aksrt'), $topic_label),
'menu_name' => $topic_label,
],
'hierarchical' => false,
'public' => true,
'show_ui' => true,
'show_in_menu' => $forum_show_menu,
'show_in_rest' => true,
'show_admin_column' => true,
'rewrite' => ['slug' => 'forum-topic'],
]);
// Forum Topic CPT
// Forum Topic CPT — native sidebar (zibll: forum_post @ pos 40)
register_post_type('aksrt_forum_topic', [
'labels' => [
'name' => __('论坛主题', 'aksrt'),
'singular_name' => __('主题', 'aksrt'),
'add_new_item' => __('发布新主题', 'aksrt'),
'edit_item' => __('编辑主题', 'aksrt'),
'view_item' => __('查看主题', 'aksrt'),
'name' => $forum_label . $posts_label,
'singular_name' => $posts_label,
'add_new' => sprintf(/* translators: %s: posts name */ __('添加%s', 'aksrt'), $posts_label),
'add_new_item' => sprintf(/* translators: %s: posts name */ __('发布新%s', 'aksrt'), $posts_label),
'edit_item' => sprintf(/* translators: %s: posts name */ __('编辑%s', 'aksrt'), $posts_label),
'view_item' => sprintf(/* translators: %s: posts name */ __('查看%s', 'aksrt'), $posts_label),
'all_items' => sprintf(/* translators: %s: posts name */ __('所有%s', 'aksrt'), $posts_label),
'menu_name' => $forum_label . $posts_label,
],
'public' => true,
'show_ui' => true,
'show_in_menu' => $forum_show_menu,
'show_in_rest' => true,
'has_archive' => true,
'menu_icon' => 'dashicons-comments',
'menu_position' => 40,
'menu_icon' => 'dashicons-buddicons-topics',
'supports' => ['title', 'editor', 'author', 'comments', 'thumbnail', 'excerpt'],
'capability_type' => 'post',
'rewrite' => ['slug' => $topic_slug],
@@ -186,50 +209,65 @@ function aksrt_register_forum_plate_cpt() {
}
}
$plate_slug = 'board';
$plate_slug = 'board';
$forum_enabled = true;
$forum = [];
if (class_exists('AKSRT_Settings')) {
$forum = AKSRT_Settings::get_forum_settings();
$plate_slug = !empty($forum['other']['plate_slug']) ? $forum['other']['plate_slug'] : 'board';
$forum = AKSRT_Settings::get_forum_settings();
$plate_slug = !empty($forum['other']['plate_slug']) ? $forum['other']['plate_slug'] : 'board';
$forum_enabled = !empty($forum['enabled']);
}
$forum_show_menu = is_admin() ? $forum_enabled : false;
$names = !empty($forum['names']) ? $forum['names'] : [];
$forum_label = sanitize_text_field((string) ($names['forum'] ?? __('论坛', 'aksrt')));
$plate_label = sanitize_text_field((string) ($names['plate'] ?? __('版块', 'aksrt')));
// Plate category taxonomy (分区)
register_taxonomy('aksrt_plate_cat', 'aksrt_forum_plate', [
'labels' => [
'name' => __('板块分区', 'aksrt'),
'name' => sprintf(/* translators: %s: plate name */ __('%s分区', 'aksrt'), $plate_label),
'singular_name' => __('分区', 'aksrt'),
'search_items' => __('搜索分区', 'aksrt'),
'all_items' => __('所有分区', 'aksrt'),
'edit_item' => __('编辑分区', 'aksrt'),
'add_new_item' => __('添加分区', 'aksrt'),
'menu_name' => __('分区', 'aksrt'),
],
'hierarchical' => true,
'public' => true,
'show_ui' => true,
'show_in_menu' => $forum_show_menu,
'show_in_rest' => true,
'show_admin_column' => true,
'rewrite' => ['slug' => 'plate-cat'],
]);
// Plate CPT (板块)
// Plate CPT (板块) — native sidebar (zibll: plate @ pos 40)
register_post_type('aksrt_forum_plate', [
'labels' => [
'name' => __('论坛版块', 'aksrt'),
'singular_name' => __('版块', 'aksrt'),
'add_new_item' => __('创建版块', 'aksrt'),
'edit_item' => __('编辑版块', 'aksrt'),
'view_item' => __('查看版块', 'aksrt'),
'search_items' => __('搜索版块', 'aksrt'),
'not_found' => __('未找到版块', 'aksrt'),
'not_found_in_trash' => __('回收站中未找到版块', 'aksrt'),
'name' => $forum_label . $plate_label,
'singular_name' => $plate_label,
'add_new' => sprintf(/* translators: %s: plate name */ __('添加%s', 'aksrt'), $plate_label),
'add_new_item' => sprintf(/* translators: %s: plate name */ __('创建%s', 'aksrt'), $plate_label),
'edit_item' => sprintf(/* translators: %s: plate name */ __('编辑%s', 'aksrt'), $plate_label),
'view_item' => sprintf(/* translators: %s: plate name */ __('查看%s', 'aksrt'), $plate_label),
'search_items' => sprintf(/* translators: %s: plate name */ __('搜索%s', 'aksrt'), $plate_label),
'not_found' => sprintf(/* translators: %s: plate name */ __('未找到%s', 'aksrt'), $plate_label),
'not_found_in_trash' => sprintf(/* translators: %s: plate name */ __('回收站中未找到%s', 'aksrt'), $plate_label),
'all_items' => sprintf(/* translators: %s: plate name */ __('所有%s', 'aksrt'), $plate_label),
'menu_name' => $forum_label . $plate_label,
],
'public' => true,
'hierarchical' => true,
'show_ui' => true,
'show_in_menu' => $forum_show_menu,
'show_in_rest' => true,
'has_archive' => false,
'menu_icon' => 'dashicons-grid-view',
'menu_position' => 40,
'menu_icon' => 'dashicons-buddicons-forums',
'supports' => ['title', 'editor', 'author', 'excerpt', 'thumbnail', 'page-attributes'],
'capability_type' => 'post',
'rewrite' => ['slug' => $plate_slug, 'with_front' => false],
'show_in_menu' => false,
]);
// Keep aksrt_forum_topic assignable to plates via taxonomy bridge