['name'=>'Products','singular_name'=>'Product'], 'public'=>true,'show_ui'=>true,'show_in_rest'=>true, 'menu_icon'=>'dashicons-battery', 'supports'=>['title','editor','excerpt','thumbnail','custom-fields'], 'rewrite'=>['slug'=>'products','with_front'=>false], 'has_archive'=>'products' ]); register_taxonomy(self::BRAND, self::TYPE, [ 'labels'=>['name'=>'Brands','singular_name'=>'Brand'], 'public'=>true,'show_ui'=>true,'show_in_rest'=>true, 'rewrite'=>['slug'=>'brands','with_front'=>false], 'hierarchical'=>false ]); register_taxonomy(self::PTYPE, self::TYPE, [ 'labels'=>['name'=>'Product Types','singular_name'=>'Product Type'], 'public'=>true,'show_ui'=>true,'show_in_rest'=>true, 'rewrite'=>['slug'=>'product-types','with_front'=>false], 'hierarchical'=>true ]); $fields = [ 'model','sku','status','official_url','amazon_url','affiliate_url','image_url', 'capacity_wh','continuous_w','surge_w','battery_chemistry','solar_input_w', 'weight_lb','compatibility','not_compatible','required_cables','evidence_status', 'source_urls','best_for','index_status','replacement_for','replaced_by' ]; foreach ($fields as $f) { register_post_meta(self::TYPE, 'bbb_'.$f, [ 'type'=>'string','single'=>true,'show_in_rest'=>true, 'sanitize_callback'=>'sanitize_textarea_field', 'auth_callback'=>function(){ return current_user_can('edit_posts'); } ]); } } public static function rest_fields() {} private static function meta($id,$key){ return trim((string)get_post_meta($id,'bbb_'.$key,true)); } private static function list_items($v){ return array_values(array_filter(array_map('trim', preg_split('/[\n|]+/', (string)$v)))); } public static function seo_title($title) { if (!is_singular(self::TYPE)) return $title; $id=get_queried_object_id(); $brand = wp_get_post_terms($id,self::BRAND,['fields'=>'names']); $brand = $brand ? $brand[0] : ''; return trim(get_the_title($id) . ($brand && stripos(get_the_title($id),$brand)===false ? ' by '.$brand : '') . ' | Specs, Compatibility & Accessories'); } public static function seo_description($desc) { if (!is_singular(self::TYPE)) return $desc; $id=get_queried_object_id(); $best=self::meta($id,'best_for'); $cap=self::meta($id,'capacity_wh'); $out=self::meta($id,'continuous_w'); $bits=[]; if($cap) $bits[]=$cap.'Wh capacity'; if($out) $bits[]=$out.'W output'; if($best) $bits[]='best for '.$best; $bits[]='compatibility, cables, accessories and buying options'; return 'See '.get_the_title($id).': '.implode(', ',$bits).'.'; } public static function robots($robots) { if (!is_singular(self::TYPE)) return $robots; $v=self::meta(get_queried_object_id(),'index_status'); if ($v==='noindex') return ['noindex'=>'noindex','follow'=>'follow']; return $robots; } public static function render_content($content) { if (!is_singular(self::TYPE) || !in_the_loop() || !is_main_query()) return $content; $id=get_the_ID(); $m=[]; foreach(['model','sku','status','official_url','amazon_url','affiliate_url','image_url','capacity_wh','continuous_w','surge_w','battery_chemistry','solar_input_w','weight_lb','compatibility','not_compatible','required_cables','evidence_status','best_for','replacement_for','replaced_by'] as $k) $m[$k]=self::meta($id,$k); $brand = wp_get_post_terms($id,self::BRAND,['fields'=>'names']); $brand=$brand?$brand[0]:''; $types = wp_get_post_terms($id,self::PTYPE,['fields'=>'names']); $type=$types?$types[0]:''; $cta = $m['affiliate_url'] ?: $m['amazon_url']; ob_start(); ?>

Verified specifications, compatibility, required cables, related accessories and buying options.

'.esc_html($b).''; ?>
Check current price Official specifications
<?pmp echo esc_attr(get_the_title().' product image'); ?>
🔋
$m['model'],'SKU / Part #'=>$m['sku'],'Capacity'=>$m['capacity_wh']?$m['capacity_wh'].' Wh':'','Continuous output'=>$m['continuous_w']?$m['continuous_w'].' W':'','Surge output'=>$m['surge_w']?$m['surge_w'].' W':'','Battery chemistry'=>$m['battery_chemistry'],'Max solar input'=>$m['solar_input_w']?$m['solar_input_w'].' W':'','Weight'=>$m['weight_lb']?$m['weight_lb'].' lb':'','Evidence'=>$m['evidence_status']]; foreach($specs as $label=>$v) if($v) echo '
'.esc_html($label).'
'.esc_html($v).'
'; ?>
'Compatible with','not_compatible'=>'Not compatible with','required_cables'=>'Required / useful cables']; foreach($sections as $k=>$label){ $items=self::list_items($m[$k]); if($items){ echo '

'.esc_html($label).'

'; foreach($items as $it) echo '
✓ '.esc_html($it).'
'; echo '
'; } } ?>

Product overview

Evidence status: . Compatibility and specifications should be confirmed against current manufacturer documentation before purchase or installation.
self::BRAND,'field'=>'name','terms'=>$brand]; if ($ptype) $tax_query[] = ['taxonomy'=>self::PTYPE,'field'=>'name','terms'=>$ptype]; if (count($tax_query)>1) $tax_query['relation']='AND'; $args=['post_type'=>self::TYPE,'post_status'=>'publish','posts_per_page'=>200,'orderby'=>'title','order'=>'ASC','s'=>$search]; if ($tax_query) $args['tax_query']=$tax_query; $items=get_posts($args); $brands=get_terms(['taxonomy'=>self::BRAND,'hide_empty'=>true]); $types=get_terms(['taxonomy'=>self::PTYPE,'hide_empty'=>true]); status_header(200); nocache_headers(); ?>> <?pmp echo esc_html(($brand ?: $ptype ?: 'Backup Power Product Database').' | Best Battery Backups'); ?>
← Best Battery BackupsBest Picks
Structured backup-power catalog

Find exact models, compatible expansion batteries, solar panels, chargers, replacement batteries, kits, cables and accessories. matching records.

'.esc_html($t->name).' ('.intval($t->count).')'; ?>
ID; $b=wp_get_post_terms($id,self::BRAND,['fields'=>'names']); $b=$b?$b[0]:''; $t=wp_get_post_terms($id,self::PTYPE,['fields'=>'names']); $t=$t?$t[0]:''; $cap=self::meta($id,'capacity_wh'); $out=self::meta($id,'continuous_w'); $st=self::meta($id,'status'); echo '
'.esc_html(trim($b.' · '.$t,' ·')).'

'.esc_html(get_the_title($id)).'

'; if($cap) echo ''.esc_html($cap).'Wh'; if($out) echo ''.esc_html($out).'W'; if($st) echo ''.esc_html($st).''; echo '

'.esc_html(get_the_excerpt($id)).'

View specs & compatibility
'; } ?>
'names']); $brand=$brand?$brand[0]:''; $data=[ '@context'=>'https://schema.org','@type'=>'Product','name'=>get_the_title($id), 'url'=>get_permalink($id),'description'=>self::seo_description(''), 'brand'=>$brand?['@type'=>'Brand','name'=>$brand]:null, 'model'=>self::meta($id,'model') ?: null, 'sku'=>self::meta($id,'sku') ?: null, 'image'=>self::meta($id,'image_url') ?: null ]; $data=array_filter($data,fn($v)=>$v!==null && $v!==''); echo ''; } } BBB_Product_Catalog::init(); register_activation_hook(__FILE__, function(){ BBB_Product_Catalog::register(); flush_rewrite_rules(); }); register_deactivation_hook(__FILE__, 'flush_rewrite_rules'); Comments on: Is it Safe to Use a Portable Power Station in the Rain? (IP Ratings Explained) https://bestbatterybackups.com/is-it-safe-to-use-a-portable-power-station-in-the-rain-ip-ratings-explained/?utm_source=rss&utm_medium=rss&utm_campaign=is-it-safe-to-use-a-portable-power-station-in-the-rain-ip-ratings-explained Independent backup-power guides, runtime math, and product comparisons for homes, offices, RVs, and emergencies. Fri, 07 Aug 2026 18:52:06 +0000 hourly 1 https://wordpress.org/?v=6.9.6