Files
WooNooW/includes/Core/Bootstrap.php
Dwindi Ramadhana 58681e272e feat: temp password in emails + WC page redirects to SPA
1. Temp password for auto-registered users:
   - Store password in _woonoow_temp_password user meta (CheckoutController)
   - Add {user_temp_password} and {login_url} variables (EmailRenderer)
   - Update new_customer email template to show credentials

2. WC page redirects to SPA routes:
   - Added redirect_wc_pages_to_spa() in TemplateOverride
   - Maps: /shop → /store/#/, /cart → /store/#/cart, etc.
   - /checkout → /store/#/checkout, /my-account → /store/#/account
   - Single products → /store/#/products/{slug}

3. Removed shortcode system:
   - Commented out Shortcodes::init() in Bootstrap
   - WC pages now redirect to SPA instead
2026-01-01 16:45:24 +07:00

131 lines
4.3 KiB
PHP

<?php
namespace WooNooW\Core;
use WooNooW\Core\Features;
use WooNooW\Admin\Menu;
use WooNooW\Admin\Assets;
use WooNooW\Admin\StandaloneAdmin;
use WooNooW\Compat\HideWooMenus;
use WooNooW\Compat\MenuProvider;
use WooNooW\Compat\AddonRegistry;
use WooNooW\Compat\RouteRegistry;
use WooNooW\Compat\NavigationRegistry;
use WooNooW\Compat\PaymentChannels;
use WooNooW\Compat\SettingsProvider;
use WooNooW\Compat\MetaFieldsRegistry;
use WooNooW\Admin\Rest\MenuController;
use WooNooW\Admin\Rest\SettingsController;
use WooNooW\Api\Routes;
use WooNooW\Core\Mail\MailQueue;
use WooNooW\Core\Mail\WooEmailOverride;
use WooNooW\Core\DataStores\OrderStore;
use WooNooW\Core\MediaUpload;
use WooNooW\Core\Notifications\PushNotificationHandler;
use WooNooW\Core\Notifications\EmailManager;
use WooNooW\Core\Campaigns\CampaignManager;
use WooNooW\Core\ActivityLog\ActivityLogTable;
use WooNooW\Branding;
use WooNooW\Frontend\Assets as FrontendAssets;
use WooNooW\Frontend\Shortcodes;
use WooNooW\Frontend\TemplateOverride;
use WooNooW\Frontend\PageAppearance;
class Bootstrap {
public static function init() {
Features::init();
HideWooMenus::init();
Menu::init();
Assets::init();
StandaloneAdmin::init();
Branding::init();
MediaUpload::init();
PushNotificationHandler::init();
EmailManager::instance(); // Initialize custom email system
CampaignManager::init(); // Initialize campaigns CPT
// Frontend (customer-spa)
FrontendAssets::init();
// Note: Shortcodes removed - WC pages now redirect to SPA routes via TemplateOverride
TemplateOverride::init();
new PageAppearance();
// Activity Log
ActivityLogTable::create_table();
// Addon system (order matters: Registry → Routes → Navigation)
AddonRegistry::init();
RouteRegistry::init();
NavigationRegistry::init();
PaymentChannels::init();
// Level 1 compatibility: Meta fields registry
MetaFieldsRegistry::init();
MenuProvider::init();
MenuController::init();
SettingsProvider::init();
Routes::init();
MailQueue::init();
WooEmailOverride::init();
OrderStore::init();
// Initialize cart for REST API requests
add_action('woocommerce_init', [self::class, 'init_cart_for_rest_api']);
// Load custom variation attributes for WooCommerce admin
add_action('woocommerce_product_variation_object_read', [self::class, 'load_variation_attributes']);
}
/**
* Properly initialize WooCommerce cart for REST API requests
* This is the recommended approach per WooCommerce core team
*/
public static function init_cart_for_rest_api() {
// Only load cart for REST API requests
if (!WC()->is_rest_api_request()) {
return;
}
// Load frontend includes (required for cart)
WC()->frontend_includes();
// Load cart using WooCommerce's official method
if (null === WC()->cart && function_exists('wc_load_cart')) {
wc_load_cart();
}
}
/**
* Load custom variation attributes from post meta for WooCommerce admin
* This ensures WooCommerce's native admin displays custom attributes correctly
*/
public static function load_variation_attributes($variation) {
if (!$variation instanceof \WC_Product_Variation) {
return;
}
$parent = wc_get_product($variation->get_parent_id());
if (!$parent) {
return;
}
$attributes = [];
foreach ($parent->get_attributes() as $attr_name => $attribute) {
if (!$attribute->get_variation()) {
continue;
}
// Read from post meta (stored as lowercase)
$meta_key = 'attribute_' . strtolower($attr_name);
$value = get_post_meta($variation->get_id(), $meta_key, true);
if (!empty($value)) {
$attributes[strtolower($attr_name)] = $value;
}
}
if (!empty($attributes)) {
$variation->set_attributes($attributes);
}
}
}