From 59901bdc26cc77f28943ecd31c51a2a33552b390 Mon Sep 17 00:00:00 2001 From: unknown Date: Sat, 25 Jul 2026 13:40:56 +0800 Subject: [PATCH 1/2] fix(orders): route /orders without WP page (404) Register commerce rewrite aliases and special-template bootstrap so /orders loads page-orders even when no page is assigned; flush rules. --- inc/modules/user-parts/routing.php | 12 ++++++- inc/modules/user-parts/template-registry.php | 34 ++++++++++++++++++++ inc/modules/user-parts/urls.php | 8 ++++- src/AKSRT/Core/ScriptsPart1b.php | 8 +++-- 4 files changed, 58 insertions(+), 4 deletions(-) diff --git a/inc/modules/user-parts/routing.php b/inc/modules/user-parts/routing.php index 4d605ae5..5e5c0e17 100644 --- a/inc/modules/user-parts/routing.php +++ b/inc/modules/user-parts/routing.php @@ -15,6 +15,9 @@ defined('ABSPATH') || exit; add_filter('query_vars', function ($vars) { $vars[] = 'aksrt_user_center'; $vars[] = 'user_nicename'; + $vars[] = 'aksrt_orders'; + $vars[] = 'aksrt_cart'; + $vars[] = 'aksrt_revenue'; return $vars; }); @@ -36,8 +39,15 @@ add_action('template_redirect', function () { add_action('init', function () { add_rewrite_tag('%aksrt_user_center%', '([^&]+)'); add_rewrite_tag('%user_nicename%', '([^/]+)'); + add_rewrite_tag('%aksrt_orders%', '([0-1])'); + add_rewrite_tag('%aksrt_cart%', '([0-1])'); + add_rewrite_tag('%aksrt_revenue%', '([0-1])'); add_rewrite_rule('^profile/?$', 'index.php?aksrt_user_center=1', 'top'); add_rewrite_rule('^user/([^/]+)/?$', 'index.php?user_nicename=$matches[1]', 'top'); + // Commerce center aliases (work even before WP page is assigned). + add_rewrite_rule('^orders/?$', 'index.php?aksrt_orders=1', 'top'); + add_rewrite_rule('^cart/?$', 'index.php?aksrt_cart=1', 'top'); + add_rewrite_rule('^revenue/?$', 'index.php?aksrt_revenue=1', 'top'); }); // --- 3b. 统一模板拦截器(核心)--- @@ -145,7 +155,7 @@ add_action('init', function () { } // 统一 flush 检查 - $rewrite_version = AKSRT_VERSION . ':sign-profile-routing-v1'; + $rewrite_version = AKSRT_VERSION . ':orders-cart-revenue-routing-v1'; $flushed = get_option('aksrt_user_rules_flushed'); if ($flushed !== $rewrite_version) { flush_rewrite_rules(false); diff --git a/inc/modules/user-parts/template-registry.php b/inc/modules/user-parts/template-registry.php index 79d48b87..25b66354 100644 --- a/inc/modules/user-parts/template-registry.php +++ b/inc/modules/user-parts/template-registry.php @@ -106,6 +106,25 @@ $_aksrt_special_templates = [ 'title' => '个人中心', 'fallback' => '/profile/', ], + // Commerce center pages (权益与消费 / 购物车 / 收益) + 'orders' => [ + 'file' => 'templates/pages/page-orders.php', + 'slug' => 'orders', + 'title' => '我的订单', + 'fallback' => '/orders/', + ], + 'cart' => [ + 'file' => 'templates/pages/page-cart.php', + 'slug' => 'cart', + 'title' => '购物车', + 'fallback' => '/cart/', + ], + 'revenue' => [ + 'file' => 'templates/pages/page-revenue.php', + 'slug' => 'revenue', + 'title' => '收益中心', + 'fallback' => '/revenue/', + ], ]; /** @var array 缓存 key=模板文件路径 => value=WP_Post|null */ @@ -377,6 +396,21 @@ function aksrt_get_current_special_template_path(): string { return $profile_template ?: ''; } + if (get_query_var('aksrt_orders')) { + $orders_template = aksrt_locate_template_file('templates/pages/page-orders.php'); + return $orders_template ?: ''; + } + + if (get_query_var('aksrt_cart')) { + $cart_template = aksrt_locate_template_file('templates/pages/page-cart.php'); + return $cart_template ?: ''; + } + + if (get_query_var('aksrt_revenue')) { + $revenue_template = aksrt_locate_template_file('templates/pages/page-revenue.php'); + return $revenue_template ?: ''; + } + if (get_query_var('aksrt_sign')) { $auth_template = aksrt_get_auth_template_file((string) get_query_var('aksrt_auth_tab'), true); $auth_template_path = aksrt_locate_template_file($auth_template); diff --git a/inc/modules/user-parts/urls.php b/inc/modules/user-parts/urls.php index 6c054355..c36916bb 100644 --- a/inc/modules/user-parts/urls.php +++ b/inc/modules/user-parts/urls.php @@ -74,7 +74,7 @@ endif; if (!function_exists('aksrt_get_orders_page_url')) : /** * 订单中心页面 URL(模板 templates/pages/page-orders.php)。 - * 未指派页面时回退 /orders/(与 Scripts 路由一致),保证「权益与消费」入口可用。 + * 优先已绑定页面;否则回退固定 rewrite /orders/(template-registry + routing)。 */ function aksrt_get_orders_page_url(): string { $url = function_exists('aksrt_get_page_url_by_template') @@ -83,6 +83,12 @@ function aksrt_get_orders_page_url(): string { if ($url !== '') { return $url; } + if (function_exists('aksrt_get_template_url')) { + $boot = aksrt_get_template_url('orders'); + if (is_string($boot) && $boot !== '' && $boot !== home_url('/')) { + return $boot; + } + } return home_url('/orders/'); } endif; diff --git a/src/AKSRT/Core/ScriptsPart1b.php b/src/AKSRT/Core/ScriptsPart1b.php index 703388f4..16f30cbc 100644 --- a/src/AKSRT/Core/ScriptsPart1b.php +++ b/src/AKSRT/Core/ScriptsPart1b.php @@ -647,9 +647,13 @@ $hmb_js = get_template_directory() . '/assets/js/header-newadd.js'; } // 交易中心共享壳层(购物车 / 订单 / 收益) + // Virtual rewrite routes (aksrt_orders / aksrt_cart / aksrt_revenue) also count. $is_commerce_center = is_page_template('templates/pages/page-orders.php') || is_page_template('templates/pages/page-cart.php') - || is_page_template('templates/pages/page-revenue.php'); + || is_page_template('templates/pages/page-revenue.php') + || (bool) get_query_var('aksrt_orders') + || (bool) get_query_var('aksrt_cart') + || (bool) get_query_var('aksrt_revenue'); if ($is_commerce_center) { $commerce_css = get_template_directory() . '/assets/css/routes/commerce.css'; if (file_exists($commerce_css)) { @@ -663,7 +667,7 @@ $hmb_js = get_template_directory() . '/assets/js/header-newadd.js'; } // 订单中心页 - if (is_page_template('templates/pages/page-orders.php')) { + if (is_page_template('templates/pages/page-orders.php') || (bool) get_query_var('aksrt_orders')) { wp_enqueue_style( 'aksrt-orders', $base_uri . '/assets/css/routes/orders.css', From a8760b976a0625986d088a3ed660a1077b04a827 Mon Sep 17 00:00:00 2001 From: unknown Date: Sat, 25 Jul 2026 13:41:21 +0800 Subject: [PATCH 2/2] fix(orders): enqueue cart/revenue assets on virtual routes --- src/AKSRT/Core/ScriptsPart1b.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/AKSRT/Core/ScriptsPart1b.php b/src/AKSRT/Core/ScriptsPart1b.php index 16f30cbc..74f3ae88 100644 --- a/src/AKSRT/Core/ScriptsPart1b.php +++ b/src/AKSRT/Core/ScriptsPart1b.php @@ -697,7 +697,7 @@ $hmb_js = get_template_directory() . '/assets/js/header-newadd.js'; } // 收益中心页 - if (is_page_template('templates/pages/page-revenue.php')) { + if (is_page_template('templates/pages/page-revenue.php') || (bool) get_query_var('aksrt_revenue')) { wp_enqueue_style( 'aksrt-revenue', $base_uri . '/assets/css/routes/revenue.css', @@ -789,7 +789,7 @@ $hmb_js = get_template_directory() . '/assets/js/header-newadd.js'; } // Cart page - if (is_page_template('templates/pages/page-cart.php')) { + if (is_page_template('templates/pages/page-cart.php') || (bool) get_query_var('aksrt_cart')) { wp_enqueue_style( 'aksrt-route-cart', $base_uri . '/assets/css/routes/cart.css',