| name | Performance Optimization |
| description | This skill activates when users discuss WordPress performance, WooCommerce optimization, slow queries, caching strategies, or site speed issues. Provides WordPress-specific optimization patterns with focus on database queries, transients, and plugin performance. |
WordPress Performance Optimization
Optimize WordPress and WooCommerce for speed, scale, and efficiency.
When This Activates
- "slow WordPress", "performance", "optimization"
- "database queries", "caching", "transients"
- "WooCommerce slow", "plugin optimization"
- User reports WordPress performance issues
- Discussing WordPress speed improvements
Database Optimization
Optimize WooCommerce Queries
$products = wc_get_products(['limit' => 100]);
foreach ($products as $product) {
echo $product->get_name();
}
$product_ids = wc_get_products([
'limit' => 100,
'return' => 'ids', // Only IDs, much faster
]);
foreach ($product_ids as $id) {
echo get_the_title($id);
}
Add Database Indexes
function skyyrose_add_custom_indexes() {
global $wpdb;
$wpdb->query("
CREATE INDEX IF NOT EXISTS idx_skyyrose_collection
ON {$wpdb->postmeta} (meta_key(191), meta_value(191))
WHERE meta_key = '_skyyrose_collection'
");
$wpdb->query("
CREATE INDEX IF NOT EXISTS idx_featured_products
ON {$wpdb->postmeta} (meta_key(191), meta_value(191))
WHERE meta_key = '_featured' AND meta_value = 'yes'
");
}
add_action('after_switch_theme', 'skyyrose_add_custom_indexes');
Use Transients for Expensive Queries
function get_skyyrose_featured_products() {
$cache_key = 'skyyrose_featured_products_v2';
$products = get_transient($cache_key);
if (false === $products) {
$products = wc_get_products([
'meta_key' => '_featured',
'meta_value' => 'yes',
'limit' => 8,
'return' => 'ids',
]);
set_transient($cache_key, $products, HOUR_IN_SECONDS);
}
return $products;
}
add_action('woocommerce_update_product', function($product_id) {
delete_transient('skyyrose_featured_products_v2');
});
Object Caching
Setup Redis/Memcached
define('WP_CACHE', true);
define('WP_CACHE_KEY_SALT', 'skyyrose_');
if (class_exists('Redis')) {
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
wp_cache_add_global_groups(['users', 'userlogins', 'usermeta']);
}
Use Object Cache
function get_skyyrose_product_data($product_id) {
$cache_key = 'product_data_' . $product_id;
$cache_group = 'skyyrose_products';
$data = wp_cache_get($cache_key, $cache_group);
if (false === $data) {
$product = wc_get_product($product_id);
$data = [
'name' => $product->get_name(),
'price' => $product->get_price(),
'image' => wp_get_attachment_url($product->get_image_id()),
'collection' => get_post_meta($product_id, '_skyyrose_collection', true),
];
wp_cache_set($cache_key, $data, $cache_group, HOUR_IN_SECONDS);
}
return $data;
}
Query Optimization
Avoid Post Meta Queries
$args = [
'post_type' => 'product',
'meta_query' => [
[
'key' => '_skyyrose_collection',
'value' => 'black_rose',
],
],
];
$query = new WP_Query($args);
register_taxonomy('skyyrose_collection', 'product', [
'hierarchical' => true,
'label' => 'Collections',
]);
$args = [
'post_type' => 'product',
'tax_query' => [
[
'taxonomy' => 'skyyrose_collection',
'field' => 'slug',
'terms' => 'black-rose',
],
],
];
$query = new WP_Query($args);
Optimize Main Query
function skyyrose_posts_per_page($query) {
if (!is_admin() && $query->is_main_query()) {
if (is_post_type_archive('product')) {
$query->set('posts_per_page', 12);
}
}
}
add_action('pre_get_posts', 'skyyrose_posts_per_page');
Asset Optimization
Defer Non-Critical Scripts
function skyyrose_defer_scripts($tag, $handle, $src) {
$defer = [
'elementor-frontend',
'swiper',
'jquery-slick',
'aos',
];
if (in_array($handle, $defer)) {
return str_replace(' src=', ' defer src=', $tag);
}
return $tag;
}
add_filter('script_loader_tag', 'skyyrose_defer_scripts', 10, 3);
Remove Unused Assets
function skyyrose_dequeue_unused_assets() {
wp_deregister_script('jquery');
wp_register_script('jquery', includes_url('/js/jquery/jquery.min.js'), [], null, true);
if (!is_singular() || !has_blocks()) {
wp_dequeue_style('wp-block-library');
wp_dequeue_style('wp-block-library-theme');
wp_dequeue_style('wc-blocks-style');
}
remove_action('wp_head', 'print_emoji_detection_script', 7);
remove_action('wp_print_styles', 'print_emoji_styles');
}
add_action('wp_enqueue_scripts', 'skyyrose_dequeue_unused_assets', 100);
Conditionally Load Scripts
function skyyrose_conditional_scripts() {
if (!is_woocommerce() && !is_cart() && !is_checkout()) {
wp_dequeue_script('wc-cart-fragments');
wp_dequeue_script('woocommerce');
wp_dequeue_style('woocommerce-layout');
wp_dequeue_style('woocommerce-smallscreen');
wp_dequeue_style('woocommerce-general');
}
if (!is_product()) {
wp_dequeue_script('three-js');
wp_dequeue_script('skyy-3d-viewer');
}
}
add_action('wp_enqueue_scripts', 'skyyrose_conditional_scripts', 99);
Image Optimization
Lazy Loading (Native)
add_filter('wp_get_attachment_image_attributes', function($attr) {
$attr['loading'] = 'lazy';
return $attr;
});
WebP Conversion
function skyyrose_webp_uploads($image, $attachment_id, $size) {
$file = get_attached_file($attachment_id);
if (function_exists('imagewebp')) {
$info = pathinfo($file);
$webp_file = $info['dirname'] . '/' . $info['filename'] . '.webp';
$image_resource = null;
if ($info['extension'] === 'jpg' || $info['extension'] === 'jpeg') {
$image_resource = imagecreatefromjpeg($file);
} elseif ($info['extension'] === 'png') {
$image_resource = imagecreatefrompng($file);
}
if ($image_resource) {
imagewebp($image_resource, $webp_file, 80);
imagedestroy();
}
}
;
}
(, , , );
WooCommerce Specific
Disable Cart Fragments (AJAX)
function skyyrose_disable_cart_fragments() {
if (is_front_page() || is_page()) {
wp_dequeue_script('wc-cart-fragments');
}
}
add_action('wp_enqueue_scripts', 'skyyrose_disable_cart_fragments', 100);
function skyyrose_update_cart_on_load() {
if (is_cart() || is_checkout()) {
WC()->cart->calculate_totals();
}
}
add_action('wp_loaded', 'skyyrose_update_cart_on_load');
Optimize Product Thumbnails
function skyyrose_optimize_product_thumbnails() {
add_filter('woocommerce_product_thumbnails_columns', function() {
return 3;
});
add_filter('woocommerce_single_product_zoom_enabled', '__return_false');
}
add_action('after_setup_theme', 'skyyrose_optimize_product_thumbnails');
Plugin Optimization
Limit Plugin Usage
function skyyrose_disable_plugins_conditionally($plugins) {
if (is_shop() || is_product()) {
$plugins = array_filter($plugins, function($plugin) {
return strpos($plugin, 'contact-form') === false;
});
}
return $plugins;
}
add_filter('option_active_plugins', 'skyyrose_disable_plugins_conditionally');
Monitoring & Profiling
Query Monitor Plugin
if (function_exists('do_action') && defined('QM_ENABLED') && QM_ENABLED) {
do_action('qm/start', 'skyyrose_expensive_operation');
do_action('qm/stop', 'skyyrose_expensive_operation');
}
Log Slow Queries
define('SAVEQUERIES', true);
add_action('shutdown', function() {
if (!defined('SAVEQUERIES') || !SAVEQUERIES) return;
global $wpdb;
$slow_queries = [];
foreach ($wpdb->queries as $query) {
if ($query[1] > 0.05) {
$slow_queries[] = [
'query' => $query[0],
'time' => $query[1],
'stack' => $query[2],
];
}
}
if (!empty($slow_queries)) {
error_log('Slow queries: ' . print_r($slow_queries, true));
}
});
Caching Strategy
Page Caching
function skyyrose_set_cache_headers() {
if (!is_user_logged_in() && !is_admin()) {
header('Cache-Control: public, max-age=3600');
header('Expires: ' . gmdate('D, d M Y H:i:s', time() + 3600) . ' GMT');
}
}
add_action('send_headers', 'skyyrose_set_cache_headers');
Fragment Caching
function skyyrose_cached_fragment($key, $ttl, $callback) {
$output = get_transient($key);
if (false === $output) {
ob_start();
call_user_func($callback);
$output = ob_get_clean();
set_transient($key, $output, $ttl);
}
echo $output;
}
skyyrose_cached_fragment(
'homepage_featured_products',
HOUR_IN_SECONDS,
function() {
get_template_part('template-parts/featured-products');
}
);
WordPress.com Specific
Jetpack Optimizations
function skyyrose_optimize_jetpack() {
add_filter('jetpack_get_available_modules', function($modules) {
$disabled = ['carousel', 'tiled-gallery', 'sharedaddy'];
return array_diff_key($modules, array_flip($disabled));
});
add_filter('jetpack_photon_skip_image', '__return_false');
}
add_action('after_setup_theme', 'skyyrose_optimize_jetpack');
Quick Wins Checklist
For SkyyRose WordPress site:
Performance Budget
For SkyyRose:
| Metric | Target | Current | Actions |
|---|
| TTFB | < 600ms | 450ms | ✅ Good |
| LCP | < 2.5s | 2.1s | ✅ Good |
| DB Queries | < 50 | 67 | ⚠️ Optimize |
| Page Size | < 2MB | 1.8MB | ✅ Good |
| Requests | < 50 | 42 | ✅ Good |
When User Reports Slow WordPress Site
- Profile first: Install Query Monitor, check slow queries
- Identify bottleneck: Database? Assets? Plugins?
- Quick wins: Enable caching, optimize images, defer scripts
- Deep optimization: Add indexes, fragment caching, CDN
- Monitor: Track metrics, set performance budget
Always measure before and after to prove improvements.