- Created LayoutWrapper component to conditionally render header/footer based on route - Created MinimalHeader component (logo only) - Created MinimalFooter component (trust badges + policy links) - Created usePageVisibility hook to get visibility settings per page - Wrapped ClassicLayout with LayoutWrapper for conditional rendering - Header/footer visibility now controlled directly in React SPA - Settings: show/minimal/hide for both header and footer - Background color support for checkout and thankyou pages
8.9 KiB
Header & Mobile CTA Fixes - Complete ✅
Date: November 27, 2025
Status: ALL ISSUES RESOLVED
🔧 ISSUES FIXED
1. Logo Not Displaying ✅
Problem:
- Logo uploaded in WordPress but not showing in header
- Frontend showing fallback "W" icon instead
Solution:
// Backend: Assets.php
$custom_logo_id = get_theme_mod('custom_logo');
$logo_url = $custom_logo_id ? wp_get_attachment_image_url($custom_logo_id, 'full') : '';
$config = [
'storeName' => get_bloginfo('name'),
'storeLogo' => $logo_url,
// ...
];
// Frontend: Header.tsx
const storeLogo = (window as any).woonoowCustomer?.storeLogo;
const storeName = (window as any).woonoowCustomer?.storeName || 'My Wordpress Store';
{storeLogo ? (
<img src={storeLogo} alt={storeName} className="h-10 w-auto" />
) : (
// Fallback icon + text
)}
Result:
- ✅ Logo from WordPress Customizer displays correctly
- ✅ Falls back to icon + text if no logo set
- ✅ Responsive sizing (h-10 = 40px height)
2. Blue Link Color from WordPress/WooCommerce ✅
Problem:
- Navigation links showing blue color
- WordPress/WooCommerce default styles overriding our design
- Links had underlines
Solution:
/* index.css */
@layer base {
/* Override WordPress/WooCommerce link styles */
a {
color: inherit;
text-decoration: none;
}
a:hover {
color: inherit;
}
.no-underline {
text-decoration: none !important;
}
}
// Header.tsx - Added no-underline class
<Link to="/" className="text-sm font-medium text-gray-700 hover:text-gray-900 transition-colors no-underline">
Shop
</Link>
Result:
- ✅ Links inherit parent color (gray-700)
- ✅ No blue color from WordPress
- ✅ No underlines
- ✅ Proper hover states (gray-900)
3. Account & Cart - Icon + Text ✅
Problem:
- Account and Cart were icon-only on desktop
- Not clear what they represent
- Inconsistent with design
Solution:
// Account
<button className="flex items-center gap-2 px-3 py-2 hover:bg-gray-100 rounded-lg">
<User className="h-5 w-5 text-gray-600" />
<span className="hidden lg:block text-sm font-medium text-gray-700">Account</span>
</button>
// Cart
<button className="flex items-center gap-2 px-3 py-2 hover:bg-gray-100 rounded-lg">
<div className="relative">
<ShoppingCart className="h-5 w-5 text-gray-600" />
{itemCount > 0 && (
<span className="absolute -top-2 -right-2 h-5 w-5 rounded-full bg-gray-900 text-white">
{itemCount}
</span>
)}
</div>
<span className="hidden lg:block text-sm font-medium text-gray-700">
Cart ({itemCount})
</span>
</button>
Result:
- ✅ Icon + text on desktop (lg+)
- ✅ Icon only on mobile/tablet
- ✅ Better clarity
- ✅ Professional appearance
- ✅ Cart shows item count in text
4. Mobile Sticky CTA - Show Selected Variation ✅
Problem:
- Mobile sticky bar only showed price
- User couldn't see which variation they're adding
- Confusing for variable products
- Simple products didn't need variation info
Solution:
{/* Mobile Sticky CTA Bar */}
{stockStatus === 'instock' && (
<div className="lg:hidden fixed bottom-0 left-0 right-0 bg-white border-t-2 p-3 shadow-2xl z-50">
<div className="flex items-center gap-3">
<div className="flex-1">
{/* Show selected variation for variable products */}
{product.type === 'variable' && Object.keys(selectedAttributes).length > 0 && (
<div className="text-xs text-gray-600 mb-1 flex items-center gap-1 flex-wrap">
{Object.entries(selectedAttributes).map(([key, value], index) => (
<span key={key} className="inline-flex items-center">
<span className="font-medium">{value}</span>
{index < Object.keys(selectedAttributes).length - 1 && <span className="mx-1">•</span>}
</span>
))}
</div>
)}
<div className="text-xl font-bold text-gray-900">{formatPrice(currentPrice)}</div>
</div>
<button className="flex-shrink-0 h-12 px-6 bg-gray-900 text-white rounded-xl">
<ShoppingCart className="h-5 w-5" />
<span className="hidden xs:inline">Add to Cart</span>
<span className="xs:hidden">Add</span>
</button>
</div>
</div>
)}
Features:
- ✅ Shows selected variation (e.g., "30ml • Pump")
- ✅ Only for variable products
- ✅ Simple products show price only
- ✅ Bullet separator between attributes
- ✅ Responsive button text ("Add to Cart" → "Add")
- ✅ Compact layout (p-3 instead of p-4)
Example Display:
Variable Product:
30ml • Pump
Rp199.000
Simple Product:
Rp199.000
📊 TECHNICAL DETAILS
Files Modified:
1. Backend:
includes/Frontend/Assets.php- Added
storeLogoto config - Added
storeNameto config - Fetches logo from WordPress Customizer
- Added
2. Frontend:
-
customer-spa/src/components/Layout/Header.tsx- Logo image support
- Icon + text for Account/Cart
- Link color fixes
-
customer-spa/src/pages/Product/index.tsx- Mobile sticky CTA with variation info
- Conditional display for variable products
-
customer-spa/src/index.css- WordPress/WooCommerce link style overrides
🎯 BEFORE/AFTER COMPARISON
Header:
Before:
- ❌ Logo not showing (fallback icon only)
- ❌ Blue links from WordPress
- ❌ Icon-only cart/account
- ❌ Underlined links
After:
- ✅ Custom logo displays
- ✅ Gray links matching design
- ✅ Icon + text for clarity
- ✅ No underlines
Mobile Sticky CTA:
Before:
- ❌ Price only
- ❌ No variation info
- ❌ Confusing for variable products
After:
- ✅ Shows selected variation
- ✅ Clear what's being added
- ✅ Smart display (variable vs simple)
- ✅ Compact, informative layout
✅ TESTING CHECKLIST
Logo:
- Logo displays when set in WordPress Customizer
- Falls back to icon + text when no logo
- Responsive sizing
- Proper alt text
Link Colors:
- No blue color on navigation
- No blue color on account/cart
- Gray-700 default color
- Gray-900 hover color
- No underlines
Account/Cart:
- Icon + text on desktop
- Icon only on mobile
- Cart badge shows count
- Hover states work
- Proper spacing
Mobile Sticky CTA:
- Shows variation for variable products
- Shows price only for simple products
- Bullet separator works
- Responsive button text
- Proper layout on small screens
🎨 DESIGN CONSISTENCY
Color Palette:
- Text: Gray-700 (default), Gray-900 (hover)
- Background: White
- Borders: Gray-200
- Badge: Gray-900 (dark)
Typography:
- Navigation: text-sm font-medium
- Cart count: text-sm font-medium
- Variation: text-xs font-medium
- Price: text-xl font-bold
Spacing:
- Header height: h-20 (80px)
- Icon size: h-5 w-5 (20px)
- Gap between elements: gap-2, gap-3
- Padding: px-3 py-2
💡 KEY IMPROVEMENTS
1. Logo Integration
- Seamless WordPress integration
- Uses native Customizer logo
- Automatic fallback
- No manual configuration needed
2. Style Isolation
- Overrides WordPress defaults
- Maintains design consistency
- No conflicts with WooCommerce
- Clean, professional appearance
3. User Clarity
- Icon + text labels
- Clear variation display
- Better mobile experience
- Reduced confusion
4. Smart Conditionals
- Variable products show variation
- Simple products show price only
- Responsive text on buttons
- Optimized for all screen sizes
🚀 DEPLOYMENT STATUS
Status: ✅ READY FOR PRODUCTION
No Breaking Changes:
- All existing functionality preserved
- Enhanced with new features
- Backward compatible
- No database changes
Browser Compatibility:
- ✅ Chrome/Edge
- ✅ Firefox
- ✅ Safari
- ✅ Mobile browsers
📝 NOTES
CSS Lint Warnings:
The @tailwind and @apply warnings in index.css are normal for Tailwind CSS. They don't affect functionality - Tailwind processes these directives correctly at build time.
Logo Source:
The logo is fetched from WordPress Customizer (Appearance > Customize > Site Identity > Logo). If no logo is set, the header shows a fallback icon with the site name.
Variation Display Logic:
product.type === 'variable' && Object.keys(selectedAttributes).length > 0
This ensures variation info only shows when:
- Product is variable type
- User has selected attributes
🎉 CONCLUSION
All 4 issues have been successfully resolved:
- ✅ Logo displays from WordPress Customizer
- ✅ No blue links - proper gray colors throughout
- ✅ Icon + text for Account and Cart on desktop
- ✅ Variation info in mobile sticky CTA for variable products
The header and mobile experience are now polished, professional, and user-friendly!
Last Updated: November 27, 2025
Version: 2.1.0
Status: Production Ready ✅