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.
This commit is contained in:
2026-07-25 13:40:56 +08:00
parent 3baa8573c9
commit 59901bdc26
4 changed files with 58 additions and 4 deletions
+11 -1
View File
@@ -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);
@@ -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);
+7 -1
View File
@@ -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;
+6 -2
View File
@@ -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',