<?php
/**
* Plugin Name: Blog Cat AJAX
* Description: AJAX category filtering with pagination support
* Version: 5.1
* Author: Claw
*/
if (!defined('ABSPATH')) exit;
// Helper: detect if visitor is a search engine crawler
function fwbc_is_crawler(){
$ua = $_SERVER['HTTP_USER_AGENT'] ?? '';
$crawlers = array(
'googlebot', 'bingbot', 'yandexbot', 'baiduspider',
'duckduckbot', 'slurp', 'facebookexternalhit',
'twitterbot', 'rogerbot', 'linkedinbot',
'embedly', 'showyoubot', 'outbrain',
'pinterest', 'slackbot', 'vkshare',
'developers.google.com', 'google-structured-data-testing-tool'
);
foreach($crawlers as $bot){
if(stripos($ua, $bot) !== false) return true;
}
return false;
}
// -- AJAX Handler --
add_action('wp_ajax_fwbc_filter_posts', 'fwbc_ajax_filter');
add_action('wp_ajax_nopriv_fwbc_filter_posts', 'fwbc_ajax_filter');
function fwbc_ajax_filter(){
$cat = isset($_GET['category']) ? sanitize_text_field($_GET['category']) : '';
$paged = isset($_GET['paged']) ? intval($_GET['paged']) : 1;
$per_page = 6;
$args = array(
'post_type' => 'post',
'posts_per_page' => $per_page,
'post_status' => 'publish',
'orderby' => 'date',
'order' => 'DESC',
'paged' => $paged
);
if($cat) $args['category_name'] = $cat;
$query = new WP_Query($args);
$total_posts = $query->found_posts;
$total_pages = ceil($total_posts / $per_page);
if($total_pages < 1) $total_pages = 1;
$html = '';
if($query->have_posts()){
while($query->have_posts()){ $query->the_post();
$img = has_post_thumbnail() ? get_the_post_thumbnail_url(get_the_ID(),'medium_large') : '';
$html .= '<article class="blog-post-card">';
if($img) $html .= '<div class="blog-post-thumb"><a href="'.get_permalink().'"><img src="'.esc_url($img).'" alt="" loading="lazy"></a></div>';
$html .= '<div class="blog-post-info">';
$html .= '<div class="blog-post-meta"><span class="blog-post-date">'.get_the_date('F j, Y').'</span>';
$pcats = get_the_category();
foreach($pcats as $c){if($c->slug!=='uncategorized')$html.='<a href="/blog/?category='.esc_attr($c->slug).'" class="blog-post-cat">'.esc_html($c->name).'</a>';}
$html .= '</div>';
$html .= '<h2 class="blog-post-title"><a href="'.get_permalink().'">'.get_the_title().'</a></h2>';
$html .= '<p class="blog-post-excerpt">'.wp_trim_words(get_the_excerpt(),25,'...').'</p>';
$html .= '<a href="'.get_permalink().'" class="blog-read-more">Read More</a>';
$html .= '</div></article>';
}
wp_reset_postdata();
} else {
$html = '<p class="blog-no-posts" style="text-align:center;padding:40px;color:#888;grid-column:1/-1;font-family:Outfit,sans-serif;font-size:16px">No posts in this category yet.</p>';
}
wp_send_json_success(array(
'html' => $html,
'total_posts' => $total_posts,
'total_pages' => $total_pages,
'current_page' => $paged,
'posts_per_page' => $per_page
));
}
// -- Post Page: Category Label --
add_action('template_redirect','fwbc_post_label',1);
function fwbc_post_label(){
if(!is_single())return;
ob_start(function($b){
$cats=get_the_category();$names=array();
foreach($cats as $c)if($c->slug!=='uncategorized')$names[]=esc_html($c->name);
if(empty($names))return $b;
$lbl='<p class="bce-cat-label" style="font-size:14px;color:#4a9eff;margin:10px 0 0;font-weight:500;font-family:Outfit,sans-serif">Post Category: '.implode(', ',$names).'</p>';
$b=preg_replace('/(<\/h1>)(\s*<\/div>\s*<\/section>)/','$1'.$lbl.'$2',$b,1);
return $b;
});
}
// -- Blog Page: Category Nav + AJAX + Card Style Override --
add_action('template_redirect','fwbc_blog_nav',1);
function fwbc_blog_nav(){
$uri=$_SERVER['REQUEST_URI']??'';
if(strpos($uri,'/blog/')!==0&&strpos($uri,'/blog')!==0)return;
ob_start(function($b){
if(strpos($b,'hero-section-blog')===false)return $b;
$cats=get_categories(array('hide_empty'=>false));
$current=isset($_GET['category'])?$_GET['category']:'';
$nav='<div class="blog-cat-nav">';
$nav.='<a href="javascript:void(0)" data-cat="" class="bce-nav'.(!$current?' bce-nav-on':'').'">All</a>';
foreach($cats as $c){
if($c->slug==='uncategorized')continue;
$on=($current===$c->slug)?' bce-nav-on':'';
$nav.='<a href="javascript:void(0)" data-cat="'.esc_attr($c->slug).'" class="bce-nav'.$on.'">'.esc_html($c->name).'</a>';
}
$nav.='</div>';
$css='<style>
.blog-cat-nav{display:flex!important;justify-content:center!important;flex-wrap:wrap!important;gap:8px!important;padding:24px 20px 32px!important;max-width:1200px!important;margin:0 auto!important}
.bce-nav{display:inline-block;padding:8px 18px;background:rgba(26,111,212,0.12);border:1px solid rgba(26,111,212,0.35);border-radius:20px;color:#4a9eff;text-decoration:none;font-size:14px;font-weight:500;font-family:Outfit,sans-serif;transition:all .2s ease;white-space:nowrap;cursor:pointer}
.bce-nav:hover,.bce-nav.bce-nav-on{background:rgba(26,111,212,0.25);border-color:#4a9eff;color:#fff}
.blog-grid-container.loading{opacity:0.4;transition:opacity .3s}
.blog-spacer{height:32px!important;margin:32px 0!important}
.blog-post-card{background:#1a1a1a!important;border:1px solid rgba(255,255,255,0.08)!important;border-radius:12px!important;overflow:hidden!important;transition:all .3s ease!important;margin:0!important;display:flex!important;flex-direction:column!important}
.blog-post-card:hover{border-color:rgba(26,111,212,0.4)!important;transform:translateY(-2px)!important}
.blog-post-thumb img{width:100%!important;height:200px!important;object-fit:cover!important;display:block}
.blog-post-info{padding:20px!important;flex:1!important;display:flex!important;flex-direction:column!important}
.blog-post-meta{display:flex!important;align-items:center!important;gap:10px!important;margin-bottom:10px!important;font-size:13px!important;color:#888!important;flex-wrap:wrap!important}
.blog-post-cat{padding:2px 8px!important;background:rgba(26,111,212,0.15)!important;border-radius:8px!important;color:#4a9eff!important;text-decoration:none!important;font-size:11px!important;font-weight:500!important;display:inline-block}
.blog-post-title{margin:0 0 8px!important;font-size:18px!important;line-height:1.3!important}
.blog-post-title a{color:#fff!important;text-decoration:none!important;font-weight:600!important}
.blog-post-title a:hover{color:#4a9eff!important}
.blog-post-excerpt{color:#a0a0a0!important;font-size:14px!important;line-height:1.5!important;margin:0 0 16px!important;flex:1!important}
.blog-read-more{display:block!important;width:100%!important;background:#1a6fd4!important;color:#ffffff!important;text-decoration:none!important;font-weight:600!important;font-size:0.95rem!important;padding:12px 20px!important;border-radius:8px!important;text-align:center!important;transition:background 0.3s!important;margin-top:12px!important;font-family:Outfit,sans-serif!important;letter-spacing:0.5px!important}
.blog-read-more:hover{background:#1458a8!important}
</style>';
$js='<script>
(function(){
document.addEventListener("DOMContentLoaded",function(){
var nav=document.querySelector(".blog-cat-nav");
if(!nav)return;
nav.addEventListener("click",function(e){
var link=e.target.closest(".bce-nav");
if(!link)return;
e.preventDefault();
var cat=link.getAttribute("data-cat");
var active=nav.querySelector(".bce-nav-on");
if(active)active.classList.remove("bce-nav-on");
link.classList.add("bce-nav-on");
if(typeof window.renderPageFromAjax==="function"){
window.renderPageFromAjax(1,cat);
}else{
var grid=document.querySelector(".blog-grid-container");
if(!grid)return;
grid.classList.add("loading");
var xhr=new XMLHttpRequest();
xhr.open("GET","/wp-admin/admin-ajax.php?action=fwbc_filter_posts&category="+encodeURIComponent(cat)+"&paged=1",true);
xhr.onload=function(){
if(xhr.status===200){var d=JSON.parse(xhr.responseText);if(d.success)grid.innerHTML=d.data.html;}
grid.classList.remove("loading");
};
xhr.onerror=function(){grid.classList.remove("loading");};
xhr.send();
}
if(cat){history.pushState(null,"","/blog/?category="+cat);}else{history.pushState(null,"","/blog/");}
});
});
})();
</script>';
$b=preg_replace('/(<\/section>)(\s*)(<div class="blog-grid-container")/','$1'.$css.$nav.$js.'$2$3',$b,1);
return $b;
});
}
// -- Category Overview Page (/categories/) --
add_action('template_redirect','fwbc_cat_overview',1);
function fwbc_cat_overview(){
global $post;
if(!is_page())return;
$slug=$post->post_name??'';
if($slug!=='categories')return;
ob_start(function($b){
if(strpos($b,'wp-site-blocks')===false)return $b;
$cats=get_categories(array('hide_empty'=>false));
$html='';
// Add navbar
// Navbar
$html.='<nav class="navbar-dark"><div class="navbar-brand"><a href="/"><img decoding="async" src="https://fixwaterca.com/wp-content/uploads/2026/02/logo.png" alt="FixWater CA"/></a><a href="/" class="brand-text">FixWater CA</a></div><ul class="navbar-nav"><li><a href="/blog/">Blog</a></li><li><a href="/terms-and-conditions/">Terms</a></li><li><a href="/privacy-policy/">Privacy</a></li><li><a href="/about-us">About Us</a></li></ul><p><a href="https://fixwaterca.com/" class="cta-button call-now-btn" id="zip-form-cta">Call Now</a></p></nav>';
// Hero with dark fade overlay
$html.='<section class="hero-section-blog"><div class="hero-content-box"><h1 class="hero-heading-blue">Blog Categories</h1><p class="hero-subheading-white">Explore our water damage restoration articles by topic.</p></div></section>';
$html.='<div class="cat-overview-grid">';
foreach($cats as $c){
if($c->slug==='uncategorized')continue;
$count=$c->count;
$link='/blog/?category='.esc_attr($c->slug);
$desc=$c->description?:'Learn more about '.esc_html($c->name).'.';
$html.='<a href="'.$link.'" class="cat-overview-card">';
$html.='<div class="cat-overview-card-body">';
$html.='<h2>'.esc_html($c->name).'</h2>';
$html.='<p class="cat-overview-desc">'.esc_html($desc).'</p>';
$html.='<span class="cat-overview-count">'.$count.' post'.($count!=1?'s':'').'</span>';
$html.='<span class="cat-overview-arrow">→</span>';
$html.='</div></a>';
}
$html.='</div>';
$disclaimer='<div class="disclaimer-section"><p>fixwaterca.com is a free service to assist homeowners in connecting with local service providers. All contractors/providers are independent and fixwaterca.com does not warrant or guarantee any work performed. It is the responsibility of the homeowner to verify that the hired contractor furnishes the necessary license and insurance required for the work being performed. All persons depicted in a photo or video are actors or models and not contractors listed on fixwaterca.com. Water damage restoration services are available in select California counties including Los Angeles, Orange, Ventura, Santa Barbara, Riverside and more. Service availability subject to ZIP code verification.</p></div>';
$footer='<footer class="site-footer-custom"><div class="footer-grid"><div class="footer-column"><h4>FixWater CA</h4><a href="/blog/">Blog</a><a href="/categories/">Categories</a><a href="/terms-and-conditions/">Terms and Conditions</a><a href="/privacy-policy/">Privacy Policy</a><a href="/about-us">About Us</a></div><div class="footer-column"><h4>Services</h4><span>Water Extraction</span><span>Drying & Dehumidification</span><span>Mold Remediation</span><span>Structural Repair</span></div><div class="footer-column"><h4>Contact</h4><span>🕐 Monday – Sunday: 10:00am – 2:00am</span><span>📧 contact@fixwaterca.com</span><p class="copyright">© 2026 FixWater CA. All rights reserved.</p></div></div></footer>';
$html.=$disclaimer.$footer;
$b=preg_replace('/<main[^>]*>.*?<\/main>/is','<main>'.$html.'</main>',$b,1);
$overview_css='<style>
body,html{background:#0d0d0d!important}
.wp-site-blocks{background:#0d0d0d!important;padding:0!important}
.wp-site-blocks header.wp-block-template-part{display:block!important}
p.wp-block-site-title,.wp-site-blocks p.wp-block-site-title{display:none!important}
/* Hero styles matching about-us */
.hero-section-blog{position:relative!important;background-image:linear-gradient(135deg,rgba(13,13,13,0.85) 0%,rgba(13,13,13,0.75) 100%),linear-gradient(to bottom,transparent 0%,rgba(13,13,13,0.95) 100%),url("https://images.pexels.com/photos/16509869/pexels-photo-16509869.jpeg")!important;background-size:cover!important;background-position:center!important;min-height:400px!important;display:flex!important;align-items:flex-start!important;justify-content:center!important;padding:92px 20px 20px!important;overflow:hidden!important;width:100%!important;margin:0!important}
.hero-content-box{position:relative!important;z-index:10!important;background:rgba(13,13,13,0.8)!important;backdrop-filter:blur(10px)!important;-webkit-backdrop-filter:blur(10px)!important;border:1px solid rgba(26,111,212,0.3)!important;border-radius:16px!important;padding:48px 64px!important;max-width:900px!important;text-align:center!important;box-shadow:0 8px 32px rgba(26,111,212,0.2)!important}
.hero-heading-blue{color:#1a6fd4!important;font-size:2.8rem!important;font-weight:800!important;margin:0!important;line-height:1.2!important;text-shadow:0 2px 8px rgba(26,111,212,0.4)!important;font-family:Outfit,sans-serif!important}
.hero-subheading-white{color:#e0e0e0!important;font-family:Outfit,sans-serif!important;font-size:17.6px!important;font-weight:400!important;line-height:28.16px!important;text-align:center!important;margin:0!important;letter-spacing:-0.1px!important;opacity:0.95!important}
.wp-site-blocks .wp-block-template-part footer{display:none!important}
.wp-site-blocks .main-navigation{display:none!important}
/* Hero */
.cat-overview-grid{max-width:1200px;margin:-40px auto 0;padding:20px 20px 60px;display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:20px;list-style:none}
.brand-text{text-decoration:none!important}
#wpadminbar{display:none!important}
.cta-button.call-now-btn{text-decoration:none!important}
.cat-overview-grid{max-width:1200px;margin:-40px auto 0;padding:20px 20px 60px;display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:20px;list-style:none}
.brand-text{text-decoration:none!important}
#wpadminbar{display:none!important}
.cta-button.call-now-btn{text-decoration:none!important}
.cat-overview-card{background:#1a1a1a;border:1px solid rgba(255,255,255,0.08);border-radius:12px;padding:32px;text-decoration:none;color:#fff;transition:all .3s ease;display:flex;flex-direction:column;justify-content:space-between;position:relative;overflow:hidden}
.cat-overview-card:hover{border-color:rgba(26,111,212,0.4);transform:translateY(-4px);box-shadow:0 8px 32px rgba(26,111,212,0.15)}
.cat-overview-card:hover .cat-overview-arrow{transform:translateX(6px);color:#4a9eff}
.cat-overview-card-body h2{font-size:22px;font-weight:600;color:#fff;margin:0 0 12px;font-family:Outfit,sans-serif}
.cat-overview-desc{font-size:14px;color:#a0a0a0;margin:0 0 16px;line-height:1.5}
.cat-overview-count{display:inline-block;padding:4px 12px;background:rgba(26,111,212,0.15);border-radius:12px;color:#4a9eff;font-size:13px;font-weight:500;font-family:Outfit,sans-serif}
.cat-overview-arrow{position:absolute;top:32px;right:32px;font-size:24px;color:#555;transition:all .3s ease}
.disclaimer-section{padding:40px 48px 10px!important;background:#1a1a1a!important;border-top:1px solid rgba(255,255,255,0.06)!important}
.disclaimer-section p{max-width:1100px!important;margin:0 auto!important;color:#858585!important;font-size:13px!important;line-height:1.8!important;text-align:center!important}
.site-footer-custom{padding:10px 48px 20px!important;background:#1a1a1a!important;border-top:1px solid rgba(255,255,255,0.06)!important}
.footer-grid{display:grid!important;grid-template-columns:repeat(3,1fr)!important;gap:50px!important;max-width:1380px!important;margin:0 auto!important}
.footer-column h4{color:#1a6fd4!important;font-size:15px!important;font-weight:600!important;margin-bottom:20px!important;text-transform:uppercase!important;letter-spacing:0.8px!important}
.footer-column a{color:#b5b5b5!important;text-decoration:none!important;display:block!important;margin-bottom:12px!important;font-size:14px!important;transition:color 0.3s}
.footer-column a:hover{color:#1a6fd4!important}
.footer-bottom{display:none!important}.footer-column p.copyright{color:#555!important;font-size:13px!important;margin:0!important;padding-top:12px!important}.footer-column a{text-decoration:none!important}.footer-column a:hover{text-decoration:underline!important}
.footer-bottom p{color:#555!important;font-size:13px!important;margin:0!important}
@media(max-width:768px){.cat-overview-grid{grid-template-columns:1fr!important;padding:20px 16px 40px}.cat-overview-hero{padding:60px 16px 30px}.footer-grid{grid-template-columns:1fr!important;gap:30px!important}.disclaimer-section{padding:30px 20px 10px!important}.site-footer-custom{padding:10px 20px 20px!important}}</style>';
return $overview_css.$b;
});
}
// -- Category Archive: Full page for crawlers, redirect for humans --
add_action('template_redirect','fwbc_cat_archive',1);
function fwbc_cat_archive(){
if(!is_category())return;
$cat=get_queried_object();
if(!$cat||$cat->slug==='uncategorized')return;
if(fwbc_is_crawler()){
// Show full SEO-optimized page to crawlers
ob_start(function($b)use($cat){
if(strpos($b,'wp-site-blocks')===false)return $b;
$imgs=array('water-damage'=>'https://images.unsplash.com/photo-1574482620266-b4a0d6b8f8d3?w=600','water-extraction'=>'https://images.unsplash.com/photo-1504328345606-18bbc4c9d77c?w=600','drying-dehumidification'=>'https://images.unsplash.com/photo-1585129777188-94600bc7b4b3?w=600','mold-remediation'=>'https://images.unsplash.com/photo-1563456021664-27b8e3d9e6c6?w=600','structural-repair'=>'https://images.unsplash.com/photo-1558618661-78197075b57f?w=600','prevention'=>'https://images.unsplash.com/photo-1600585154340-be6161a56a0c?w=600','floor-restoration'=>'https://images.unsplash.com/photo-1560185007-cde436f6a4d0?w=600');
$fb=$imgs[$cat->slug]??'https://images.unsplash.com/photo-1574482620266-b4a0d6b8f8d3?w=600';
$html='<div class="bce-arc"><h1>'.esc_html($cat->name).' - Water Damage Restoration Blog</h1>';
if($cat->description)$html.='<p>'.esc_html($cat->description).'</p>';
$html.='</div><div class="bce-grid">';
$q=new WP_Query(array('post_type'=>'post','category_name'=>$cat->slug,'posts_per_page'=>50,'post_status'=>'publish'));
if($q->have_posts()){while($q->have_posts()){$q->the_post();
$img=has_post_thumbnail()?get_the_post_thumbnail_url(get_the_ID(),'medium_large'):$fb;
$html.='<article class="bce-card"><img src="'.esc_url($img).'" alt="'.esc_attr(get_the_title()).'" loading="lazy"><div class="bce-card-body"><div class="bce-date">'.get_the_date('F j,Y').'</div><h2><a href="'.get_permalink().'">'.get_the_title().'</a></h2><p class="bce-excerpt">'.wp_trim_words(get_the_excerpt(),30,'...').'</p></div></article>';
}wp_reset_postdata();}else{$html.='<div class="bce-empty">No posts yet.</div>';}
$html.='</div>';
$disclaimer='<div class="disclaimer-section"><p>fixwaterca.com is a free service to assist homeowners in connecting with local service providers. All contractors/providers are independent and fixwaterca.com does not warrant or guarantee any work performed. It is the responsibility of the homeowner to verify that the hired contractor furnishes the necessary license and insurance required for the work being performed. All persons depicted in a photo or video are actors or models and not contractors listed on fixwaterca.com. Water damage restoration services are available in select California counties including Los Angeles, Orange, Ventura, Santa Barbara, Riverside and more. Service availability subject to ZIP code verification.</p></div>';
$footer='<footer class="site-footer-custom"><div class="footer-grid"><div class="footer-column"><h4>FixWater CA</h4><a href="/blog/">Blog</a><a href="/categories/">Categories</a><a href="/terms-and-conditions/">Terms and Conditions</a><a href="/privacy-policy/">Privacy Policy</a><a href="/about-us">About Us</a></div><div class="footer-column"><h4>Services</h4><span>Water Extraction</span><span>Drying & Dehumidification</span><span>Mold Remediation</span><span>Structural Repair</span></div><div class="footer-column"><h4>Contact</h4><span>🕐 Monday – Sunday: 10:00am – 2:00am</span><span>📧 contact@fixwaterca.com</span><p class="copyright">© 2026 FixWater CA. All rights reserved.</p></div></div></footer>';
$html.=$disclaimer.$footer;
$b=preg_replace('/<main[^>]*>.*?<\/main>/is','<main>'.$html.'</main>',$b,1);
$archive_css='<style>
body,html{background:#0d0d0d!important}
.wp-site-blocks{background:#0d0d0d!important;padding:0!important}
.wp-site-blocks header,.wp-site-blocks nav{display:none!important}
.bce-arc{text-align:center;padding:60px 20px 40px;background:linear-gradient(180deg,rgba(26,111,212,0.15) 0%,#0d0d0d 100%);max-width:1200px;margin:0 auto}
.bce-arc h1{font-size:clamp(28px,4vw,42px);font-weight:700;color:#fff;margin:0 0 10px;font-family:Outfit,sans-serif}
.bce-arc p{font-size:16px;color:#a0a0a0;margin:0}
.bce-grid{max-width:1200px;margin:0 auto;padding:40px 20px 60px;display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:20px;list-style:none}
.bce-card{background:#1a1a1a;border:1px solid rgba(255,255,255,0.08);border-radius:12px;overflow:hidden;transition:all .3s ease;font-family:Outfit,sans-serif}
.bce-card:hover{border-color:rgba(26,111,212,0.4);transform:translateY(-2px)}
.bce-card img{width:100%;height:200px;object-fit:cover}
.bce-card-body{padding:20px}
.bce-card-body h2{margin:0 0 8px;font-size:18px}
.bce-card-body h2 a{color:#fff;text-decoration:none;font-weight:600}
.bce-card-body h2 a:hover{color:#4a9eff}
.bce-date{color:#888;font-size:13px;margin-bottom:8px}
.bce-excerpt{color:#a0a0a0;font-size:14px;line-height:1.5}
.bce-empty{text-align:center;padding:40px;color:#888;grid-column:1/-1}
.disclaimer-section{padding:40px 48px 10px!important;background:#1a1a1a!important;border-top:1px solid rgba(255,255,255,0.06)!important}
.disclaimer-section p{max-width:1100px!important;margin:0 auto!important;color:#858585!important;font-size:13px!important;line-height:1.8!important;text-align:center!important}
.site-footer-custom{padding:10px 48px 20px!important;background:#1a1a1a!important;border-top:1px solid rgba(255,255,255,0.06)!important}
.footer-grid{display:grid!important;grid-template-columns:repeat(3,1fr)!important;gap:50px!important;max-width:1380px!important;margin:0 auto!important}
.footer-column h4{color:#1a6fd4!important;font-size:15px!important;font-weight:600!important;margin-bottom:20px!important;text-transform:uppercase!important;letter-spacing:0.8px!important}
.footer-column a{color:#b5b5b5!important;text-decoration:none!important;display:block!important;margin-bottom:12px!important;font-size:14px!important;transition:color 0.3s}
.footer-column a:hover{color:#1a6fd4!important}
.footer-bottom{display:none!important}.footer-column p.copyright{color:#555!important;font-size:13px!important;margin:0!important;padding-top:12px!important}.footer-column a{text-decoration:none!important}.footer-column a:hover{text-decoration:underline!important}
.footer-bottom p{color:#555!important;font-size:13px!important;margin:0!important}
@media(max-width:768px){.bce-grid{grid-template-columns:1fr!important;padding:20px 16px 40px}.bce-arc{padding:40px 16px 30px}.footer-grid{grid-template-columns:1fr!important;gap:30px!important}.disclaimer-section{padding:30px 20px 10px!important}.site-footer-custom{padding:10px 20px 20px!important}}</style>';
return $archive_css.$b;
});
} else {
// Redirect humans to /blog/?category=X
$cat_slug = $cat->slug;
$redirect_url = '/blog/?category='.$cat_slug;
// Use a brief notice page that auto-redirects (SEO-friendly for users who bookmarked old URLs)
$cat_name = esc_html($cat->name);
$js_redirect = '<!DOCTYPE html><html><head><meta charset="utf-8"><meta name="robots" content="noindex, follow"><title>Redirecting to '.$cat_name.' - FixWater CA</title><style>body{background:#0d0d0d;color:#fff;font-family:Outfit,sans-serif;display:flex;align-items:center;justify-content:center;min-height:100vh;margin:0;padding:20px;box-sizing:border-box}.redirect-box{text-align:center;max-width:400px}.spinner{width:40px;height:40px;border:3px solid rgba(26,111,212,0.2);border-top-color:#1a6fd4;border-radius:50%;animation:spin 1s linear infinite;margin:0 auto 20px}@keyframes spin{to{transform:rotate(360deg)}}a{color:#4a9eff;text-decoration:none}.loading-text{color:#888;font-size:14px;margin-top:16px}</style></head><body><div class="redirect-box"><div class="spinner"></div><h2 style="margin:0 0 8px">Viewing '.$cat_name.' Posts</h2><p style="color:#a0a0a0;margin:0 0 16px;font-size:14px">Taking you to our blog...</p><p class="loading-text">If you are not redirected, <a href="'.$redirect_url.'">click here</a>.</p></div><script>setTimeout(function(){window.location.href="'.$redirect_url.'";},800);</script></body></html>';
header('Content-Type: text/html; charset=utf-8');
echo $js_redirect;
exit;
}
}
Water Damage Tips & Guides California - FixWater CA Blog
Blog
FixWater CA
Call Now
Welcome to FixWater California Blog
Insights, tips, and updates on water damage restoration
fixwaterca.com is a free service to assist homeowners in connecting with local service providers. All contractors/providers are independent and fixwaterca.com does not warrant or guarantee any work performed. It is the responsibility of the homeowner to verify that the hired contractor furnishes the necessary license and insurance required for the work being performed. All persons depicted in a photo or video are actors or models and not contractors listed on fixwaterca.com. Water damage restoration services are available in select California counties including Los Angeles, Orange, Ventura, Santa Barbara, Riverside and more. Service availability subject to ZIP code verification.
📞