// ============================================================================= // SECTION 1 — WooCommerce surgical cleanup (replaces Debloat) // ============================================================================= // Disable marketplace suggestions (nag widgets in Products list) add_filter( 'woocommerce_allow_marketplace_suggestions', '__return_false' ); // Disable WooCommerce usage tracker (anonymous telemetry) add_filter( 'woocommerce_apply_tracking', '__return_false' ); add_filter( 'woocommerce_allow_tracking', '__return_false' ); // Remove "Extensions" submenu from WooCommerce menu add_action( 'admin_menu', function() { remove_submenu_page( 'woocommerce', 'wc-addons' ); }, 999 ); // Remove WC Status dashboard widget add_action( 'wp_dashboard_setup', function() { remove_meta_box( 'woocommerce_dashboard_status', 'dashboard', 'normal' ); }); // Unregister legacy WC widgets (modern themes use blocks) add_action( 'widgets_init', function() { if ( ! class_exists( 'WC_Widget' ) ) return; $widgets = [ 'WC_Widget_Cart', 'WC_Widget_Layered_Nav', 'WC_Widget_Layered_Nav_Filters', 'WC_Widget_Price_Filter', 'WC_Widget_Product_Categories', 'WC_Widget_Product_Search', 'WC_Widget_Product_Tag_Cloud', 'WC_Widget_Products', 'WC_Widget_Rating_Filter', 'WC_Widget_Recently_Viewed', 'WC_Widget_Recent_Reviews', 'WC_Widget_Top_Rated_Products', ]; foreach ( $widgets as $w ) { if ( class_exists( $w ) ) unregister_widget( $w ); } }, 99 ); // Dequeue cart fragments on non-cart/checkout pages add_action( 'wp_enqueue_scripts', function() { if ( ! function_exists('is_cart') ) return; if ( ! is_cart() && ! is_checkout() ) { wp_dequeue_script( 'wc-cart-fragments' ); } }, 11 ); // Dequeue WC styles/scripts on non-WC pages add_action( 'wp_enqueue_scripts', function() { if ( ! function_exists('is_woocommerce') ) return; if ( ! is_woocommerce() && ! is_cart() && ! is_checkout() && ! is_account_page() ) { wp_dequeue_style( 'wc-blocks-style' ); wp_dequeue_style( 'wc-blocks-vendors-style' ); wp_dequeue_style( 'woocommerce-general' ); wp_dequeue_style( 'woocommerce-layout' ); wp_dequeue_style( 'woocommerce-smallscreen' ); wp_dequeue_script( 'wc-add-to-cart' ); wp_dequeue_script( 'woocommerce' ); wp_dequeue_script( 'wc-cart-fragments' ); } }, 100 ); // Remove safe-to-disable WC Admin promotional features (KEEPS core admin) add_filter( 'woocommerce_admin_features', function( $features ) { $remove = [ 'remote-inbox-notifications', 'remote-free-extensions', 'mobile-app-banner', 'wc-pay-promotion', 'wc-pay-welcome-page', 'shipping-label-banner', 'subscriptions-banner', 'launch-your-store', 'customize-store', ]; return array_diff( $features, $remove ); }); // Limit Action Scheduler log retention to 7 days (was 30) — major DB cleanup add_filter( 'action_scheduler_retention_period', function() { return DAY_IN_SECONDS * 7; }); // No revision history for products (you don't need it) add_filter( 'wp_revisions_to_keep', function( $num, $post ) { if ( in_array( $post->post_type, ['product', 'product_variation'], true ) ) { return 0; } return $num; }, 10, 2 ); // ============================================================================= // SECTION 2 — WordPress core cleanup (replaces Perfmatters) // ============================================================================= // Disable emojis (saves ~12KB JS + CSS on every page) add_action( 'init', function() { remove_action( 'wp_head', 'print_emoji_detection_script', 7 ); remove_action( 'admin_print_scripts', 'print_emoji_detection_script' ); remove_action( 'wp_print_styles', 'print_emoji_styles' ); remove_action( 'admin_print_styles', 'print_emoji_styles' ); remove_filter( 'the_content_feed', 'wp_staticize_emoji' ); remove_filter( 'comment_text_rss', 'wp_staticize_emoji' ); remove_filter( 'wp_mail', 'wp_staticize_emoji_for_email' ); add_filter( 'tiny_mce_plugins', function( $plugins ) { return is_array( $plugins ) ? array_diff( $plugins, ['wpemoji'] ) : []; }); add_filter( 'emoji_svg_url', '__return_false' ); }); // Disable Dashicons on frontend for non-logged-in users add_action( 'wp_enqueue_scripts', function() { if ( ! is_user_logged_in() ) { wp_deregister_style( 'dashicons' ); } }, 100 ); // Disable oEmbed add_action( 'init', function() { remove_action( 'rest_api_init', 'wp_oembed_register_route' ); remove_filter( 'rest_pre_serve_request', '_oembed_rest_pre_serve_request', 10 ); remove_action( 'wp_head', 'wp_oembed_add_discovery_links' ); remove_action( 'wp_head', 'wp_oembed_add_host_js' ); add_filter( 'embed_oembed_discover', '__return_false' ); remove_filter( 'oembed_dataparse', 'wp_filter_oembed_result', 10 ); }, 9999 ); // Remove jQuery Migrate on frontend add_action( 'wp_default_scripts', function( $scripts ) { if ( ! is_admin() && isset( $scripts->registered['jquery'] ) ) { $script = $scripts->registered['jquery']; if ( $script->deps ) { $script->deps = array_diff( $script->deps, ['jquery-migrate'] ); } } }); // Hide WordPress version remove_action( 'wp_head', 'wp_generator' ); add_filter( 'the_generator', '__return_empty_string' ); add_filter( 'style_loader_src', function( $src ) { return remove_query_arg( 'ver', $src ); }, 9999 ); add_filter( 'script_loader_src', function( $src ) { return remove_query_arg( 'ver', $src ); }, 9999 ); // Remove RSD link, Shortlink, RSS feed links remove_action( 'wp_head', 'rsd_link' ); remove_action( 'wp_head', 'wp_shortlink_wp_head', 10 ); remove_action( 'template_redirect', 'wp_shortlink_header', 11 ); remove_action( 'wp_head', 'feed_links', 2 ); remove_action( 'wp_head', 'feed_links_extra', 3 ); // Disable self pingbacks add_action( 'pre_ping', function( &$links ) { $home = home_url(); foreach ( $links as $key => $link ) { if ( strpos( $link, $home ) === 0 ) { unset( $links[ $key ] ); } } }); // Remove comment URL field (anti-spam) add_filter( 'comment_form_default_fields', function( $fields ) { unset( $fields['url'] ); return $fields; }); // Remove Gutenberg global styles on frontend add_action( 'wp_enqueue_scripts', function() { wp_dequeue_style( 'global-styles' ); wp_dequeue_style( 'classic-theme-styles' ); }, 100 ); // ============================================================================= // SECTION 3 — Heartbeat optimization // ============================================================================= // Only allow Heartbeat when editing posts/pages add_action( 'init', function() { global $pagenow; if ( ! in_array( $pagenow, ['post.php', 'post-new.php'], true ) ) { wp_deregister_script( 'heartbeat' ); } }, 1 ); // Slow Heartbeat to 60 seconds when it does run add_filter( 'heartbeat_settings', function( $settings ) { $settings['interval'] = 60; return $settings; }); // ============================================================================= // SECTION 4 — Security hardening // ============================================================================= // Disable XML-RPC entirely (no Jetpack, no mobile app, no Zapier/IFTTT to WP) add_filter( 'xmlrpc_enabled', '__return_false' ); add_filter( 'pre_update_option_enable_xmlrpc', '__return_false' ); add_filter( 'pre_option_enable_xmlrpc', '__return_zero' ); add_action( 'init', function() { remove_action( 'wp_head', 'rsd_link' ); // RSD link advertises XML-RPC }); // Optional: block at HTTP level too — see .htaccess note at bottom // Disable XML-RPC pingback methods specifically (the brute-force vector) add_filter( 'xmlrpc_methods', function( $methods ) { unset( $methods['pingback.ping'] ); unset( $methods['pingback.extensions.getPingbacks'] ); return $methods; }); // Remove X-Pingback header add_filter( 'wp_headers', function( $headers ) { unset( $headers['X-Pingback'] ); return $headers; }); // Disable Application Passwords (REST API tokens) add_filter( 'wp_is_application_passwords_available', '__return_false' ); // Generic login error (don't reveal whether username exists) add_filter( 'login_errors', function() { return 'Login failed. Please check your credentials and try again.'; }); // ============================================================================= // SECTION 5 — DB cleanup // ============================================================================= // Daily cleanup of expired transients add_action( 'init', function() { if ( ! wp_next_scheduled( 'steadfast_transient_cleanup' ) ) { wp_schedule_event( time(), 'daily', 'steadfast_transient_cleanup' ); } }); add_action( 'steadfast_transient_cleanup', function() { global $wpdb; // Delete expired transient timeouts $wpdb->query( "DELETE FROM {$wpdb->options} WHERE option_name LIKE '\_transient\_timeout\_%' AND option_value < " . time() ); // Delete orphaned transients (transient_X exists without matching transient_timeout_X) $wpdb->query( "DELETE o1 FROM {$wpdb->options} o1 LEFT JOIN {$wpdb->options} o2 ON o1.option_name = REPLACE(o2.option_name, '_transient_timeout_', '_transient_') WHERE o1.option_name LIKE '\_transient\_%' AND o1.option_name NOT LIKE '\_transient\_timeout\_%' AND o2.option_name IS NULL" ); }); https://steadfastmall.com/ 2026-06-03T09:20:53+00:00 https://steadfastmall.com/shop/ 2025-11-18T12:06:08+00:00 https://steadfastmall.com/shipping-policy/ 2025-04-12T20:51:25+00:00 https://steadfastmall.com/about/ 2025-04-12T20:53:06+00:00 https://steadfastmall.com/terms-conditions/ 2024-04-29T18:48:04+00:00 https://steadfastmall.com/privacy-policy/ 2025-04-12T20:52:13+00:00 https://steadfastmall.com/return-policy/ 2025-04-12T20:54:44+00:00 https://steadfastmall.com/faq/ 2025-04-12T20:54:07+00:00 https://steadfastmall.com/contact/ 2025-04-12T20:50:14+00:00 https://steadfastmall.com/product/dyson-airwrap-multi-styler-complete-long-strawberry-bronze-blush-pink/ 2026-04-30T11:55:54+00:00 https://steadfastmall.com/product/shark-flexstyle-air-styling-drying-system-powerful-hair-blow-dryer-and-multi-styler-hd430/ 2026-06-09T20:34:55+00:00 https://steadfastmall.com/product/ghd-chronos-styler-flat-iron-hair-straightener-white/ 2026-06-01T11:19:13+00:00 https://steadfastmall.com/product/ghd-chronos-flat-iron-hair-straightener-black/ 2026-06-01T11:19:22+00:00 https://steadfastmall.com/product/dyson-airstrait-straightener-ceramic-pink-rose-gold/ 2026-01-21T03:21:43+00:00 https://steadfastmall.com/product/dyson-airstrait-straightener-nickel-copper/ 2026-01-21T03:24:59+00:00 https://steadfastmall.com/product/dyson-airwrap-multi-styler-complete-long-vinca-blue/ 2026-01-21T03:26:30+00:00 https://steadfastmall.com/product/dyson-airwrap-multi-styler-complete-long-fuchsia-nickel/ 2026-05-15T01:37:11+00:00 https://steadfastmall.com/product/dyson-airwrap-multi-styler-complete-long-prussian-blue-copper/ 2026-05-02T16:17:29+00:00 https://steadfastmall.com/product/dyson-airwrap-multi-styler-complete-long-ceramic-pink/ 2026-05-07T00:55:15+00:00 https://steadfastmall.com/product/dyson-airwrap-multi-styler-complete-long-nickel-copper/ 2026-05-02T16:21:14+00:00 https://steadfastmall.com/product/dyson-airwrap-multi-styler-complete-long-ceramic-pop/ 2026-05-02T16:22:01+00:00 https://steadfastmall.com/product/yves-saint-laurent-y-eau-de-toilette-spray-3-4-oz/ 2026-03-02T05:38:13+00:00 https://steadfastmall.com/product/yves-saint-laurent-y-eau-fraiche-spray-3-4-oz/ 2025-08-13T02:46:19+00:00 https://steadfastmall.com/product/yves-saint-laurent-y-eau-de-parfum-3-4-oz/ 2025-11-06T12:54:08+00:00 https://steadfastmall.com/product/lancome-la-vie-est-belle-eau-de-parfum/ 2026-06-01T11:22:14+00:00 https://steadfastmall.com/product/yves-saint-laurent-y-le-parfum/ 2025-10-07T03:07:23+00:00 https://steadfastmall.com/product/maison-francis-kurkdjian-baccarat-rouge-540-extrait-edp-spray-1-2-oz/ 2026-06-01T11:25:28+00:00 https://steadfastmall.com/product/maison-francis-kurkdjian-baccarat-rouge-540-extrait-edp-spray/ 2026-06-01T11:25:39+00:00 https://steadfastmall.com/product/maison-francis-kurkdjian-baccarat-rouge-540-extrait-edp-spray-6-8-oz/ 2026-06-01T11:25:49+00:00 https://steadfastmall.com/product/yves-saint-laurent-y-le-parfum-men-edp-spray/ 2025-10-07T03:07:02+00:00 https://steadfastmall.com/product/dyson-airwrap-multi-styler-complete-long/ 2026-01-21T03:17:29+00:00