אם השתמשתם בעבר ב-WP-Rocket, אתם בטח כבר יודעים למה הוא נחשב לאחד מתוספי ה-cache הפופולריים ביותר לוורדפרס – הוא פשוט עובד טוב כברירת מחדל.
אבל אם אתם מנהלים אתרי לקוחות, עובדים עם פריסות CI/CD או צריכים לוגיקת cache מותנית, בשלב מסוים הממשק של התוסף כבר לא יספיק.
הפוסט הזה הוא ההמשך הטכני והמעשי של מדריך ההגדרות שלי ל-WP Rocket. כאן אני נכנס לפילטרים, פקודות WP-CLI, סקריפטים לפריסה וטכניקות debugging שאני משתמש בהן באתרים אמיתיים. אם אתם מרגישים בנוח עם PHP וטרמינל, הפוסט הזה נכתב בדיוק בשבילכם.
קפצו ישירות לרפרנס של Filters & Hooks
איפה לשים את הקוד שלכם
לפני שאתם מוסיפים snippet כלשהו של WP Rocket, חשוב להחליט איפה הכי נכון למקם אותו. בחירה לא נכונה יכולה לעלות לכם אחר כך בשעות עבודה מיותרות אחרי עדכון תבנית או מיגרציה.
אפשרות 1: קובץ functions.php של תבנית בת
זה פתרון מהיר לבדיקה או לניסוי. אפשר להדביק snippet לתוך functions.php של תבנית הבת, והוא ירוץ מיד. החיסרון הוא שברגע שתעברו לתבנית אחרת, כל ההתאמות האלו פשוט ייעלמו.
אפשרות 2: MU-Plugin (מומלץ)
צרו קובץ בתוך wp-content/mu-plugins/, והוא ייטען אוטומטית בכל בקשה. אין צורך להפעיל אותו, הוא נשאר פעיל גם אם מחליפים תבנית, והוא גם נטען לפני תוספים רגילים.
<?php
/**
* Plugin Name: WP Rocket Custom Filters
*/
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
// Always check that WP Rocket functions exist
if ( function_exists( 'get_rocket_option' ) ) {
// Your filters go here
}תוספי MU נטענים לפי סדר אלפביתי, לכן אם סדר הטעינה חשוב לכם, הוסיפו קידומת לשם הקובץ, למשל 00-wp-rocket-custom.php.
אפשרות 3: התוסף Code Snippets
אם אתם מעדיפים ממשק גרפי, התוסף החינמי Code Snippets מאפשר לכם להוסיף קטעי PHP דרך לוח הבקרה. אפשר להפעיל ולכבות כל snippet בלי לגעת בקבצים.
תמיד עטפו קריאות לפונקציות של WP Rocket בתוך בדיקות function_exists(). אם התוסף יכובה או יוסר, האתר שלכם לא יקרוס עם fatal error.
משפחת הפילטרs בשם pre_get_rocket_option
WP Rocket שומר את ההגדרות שלו בתוך מערך options אחד. הפילטר בשם pre_get_rocket_option_{option_name} מאפשר לכם לדרוס כל הגדרה דרך PHP עוד לפני ש-WP Rocket ניגש אליה. זה אחד הכלים הכי גמישים ושימושיים בארגז הכלים של מפתחים.
החזירו ערך truthy כדי להפעיל אפשרות מסוימת, או 0 כדי לכבות אותה:
// Force-enable Delay JS on every page
add_filter( 'pre_get_rocket_option_delay_js', '__return_true' );
// Force-disable minify CSS
add_filter( 'pre_get_rocket_option_minify_css', '__return_zero' );אפשר כמובן גם להפעיל לוגיקה מותנית. הנה דוגמה מעשית שמכבה את Remove Unused CSS בעמודי WooCommerce, שם סגנונות דינמיים עלולים להיחתך לא נכון:
add_filter( 'pre_get_rocket_option_remove_unused_css', function( $value ) {
if ( function_exists( 'is_woocommerce' ) && is_woocommerce() ) {
return 0;
}
return $value;
} );הגדרות לפי סביבה (staging/production)
עבור סוכנויות, זה בדיוק סוג הדברים שחוסך המון עבודה. השתמשו ב-wp_get_environment_type(), שזמין החל מ-WordPress 5.5, כדי להחיל הגדרות שונות של WP Rocket ב-staging לעומת production:
add_filter( 'pre_get_rocket_option_minify_css', function( $value ) {
// Disable CSS minification on staging for easier debugging
if ( wp_get_environment_type() === 'staging' ) {
return 0;
}
return $value;
} );
add_filter( 'pre_get_rocket_option_minify_js', function( $value ) {
if ( wp_get_environment_type() === 'staging' ) {
return 0;
}
return $value;
} );הגדירו את סוג הסביבה בתוך wp-config.php:
define( 'WP_ENVIRONMENT_TYPE', 'staging' ); // 'production', 'staging', 'development', 'local'רפרנס מרכזי של Filters & Hooks
אלו הפילטרs שאני חוזר אליהם הכי הרבה. לכל אחד מהם צירפתי דוגמת קוד מעשית שתוכלו להדביק ישירות ל-mu-plugin שלכם.
rocket_delay_js_exclusions
הפילטר מאפשר להחריג סקריפטים מסוימים מ-Delay JavaScript Execution. זה הפילטר שתשתמשו בו כשהסליידר, הטופס או סקריפט כלשהו בחלק הקריטי העליון של העמוד נשבר כי דחו אותו.
add_filter( 'rocket_delay_js_exclusions', function( $exclusions ) {
// Exclude Swiper slider - it must run immediately for above-the-fold carousels
$exclusions[] = 'swiper-bundle(.*).js';
// Exclude Google Tag Manager
$exclusions[] = 'googletagmanager.com/gtm.js';
// Exclude a custom inline script by its content
$exclusions[] = 'initHeroAnimation';
return $exclusions;
} );כתבתי פוסט ייעודי על הפילטר הזה עם דוגמאות נוספות: החרגת סקריפטים מהפיצ'ר Load JS Deferred של WP Rocket.
הפילטר rocket_exclude_js
כאן מחריגים קבצי JavaScript מ-minification ומ-combine. זה שימושי במיוחד עבור vendor scripts שכבר עברו minify, או עבור סקריפטים שנשברים כשסדר הטעינה שלהם משתנה.
add_filter( 'rocket_exclude_js', function( $excluded_js ) {
// Exclude an already-minified vendor bundle
$excluded_js[] = '/wp-content/themes/your-theme/js/vendor.min.js';
// Exclude a payment gateway script that breaks when combined
$excluded_js[] = '/wp-content/plugins/payment-plugin/assets/checkout.js';
return $excluded_js;
} );הפילטר rocket_exclude_css
אותו רעיון, אבל עבור קבצי CSS. זה שימושי עבור stylesheets שנוצרים דינמית, או עבור CSS קריטי שחייב להיטען בסדר מסוים.
add_filter( 'rocket_exclude_css', function( $excluded_css ) {
// Exclude a dynamically generated stylesheet (e.g., from a page builder)
$excluded_css[] = '/wp-content/plugins/elementor/assets/css/custom-frontend.css';
// Exclude a stylesheet loaded via a CDN with a dynamic version parameter
$excluded_css[] = 'fonts.googleapis.com/css';
return $excluded_css;
} );הפילטר rocket_rucss_skip_styles_with_attr
פילטר זה מאפשר לדלג על בלוקים מסוימים של <style> מתוך מנגנון Remove Unused CSS לפי attributes ב-HTML שלהם. זה שימושי כשאיזה תוסף מזריק inline styles ש-RUCSS מסיר בטעות.
add_filter( 'rocket_rucss_skip_styles_with_attr', function( $attributes ) {
// Skip any style tag with data-no-optimize attribute
$attributes[] = 'data-no-optimize';
// Skip styles injected by a specific plugin
$attributes[] = 'id="my-plugin-inline-css"';
return $attributes;
} );הפילטר rocket_preload_exclude_urls
כאן תוכלו למנוע preload מכתובות URL מסוימות. זחלן ה-preload של WP Rocket עובר על כל URL שמופיע במפת האתר שלכם, והפילטר הזה מאפשר לכם לחסוך ממנו כתובות שלא באמת צריכות cache.
add_filter( 'rocket_preload_exclude_urls', function( $excluded_urls ) {
// Exclude paginated archive pages beyond page 5
$excluded_urls[] = '/page/[5-9][0-9]*/';
$excluded_urls[] = '/page/[0-9]{3,}/';
// Exclude filtered product pages
$excluded_urls[] = '/shop/?filter(.*)';
return $excluded_urls;
} );הפילטר rocket_override_donotcachepage
הפילטר הזה מכריח את WP Rocket לשמור עמוד ב-cache גם כשאיזה תוסף אחר הגדיר את הקבוע DONOTCACHEPAGE. תוספי membership והרשאות גישה נוטים להגדיר את הקבוע הזה גם בעמודים שהם בפועל ציבוריים.
// Force caching on all pages, ignoring DONOTCACHEPAGE from other plugins
add_filter( 'rocket_override_donotcachepage', '__return_true', PHP_INT_MAX );השתמשו ב-filter הזה בזהירות. אם עמוד מסוים מציג תוכן מותאם אישית לכל משתמש, כפיית cache תגרום לגולשים לראות תוכן שגוי.
השתמשו בו רק כשברור לכם שהתוכן בעמוד זהה לכל הגולשים שאינם מחוברים.
הפילטר rocket_htaccess_mod_rewrite
כאן אפשר לשנות את כללי ה-rewrite ש-WP Rocket מוסיף לקובץ .htaccess שלכם. זה כבר שימוש מתקדם יותר, למשל אם תרצו להוסיף כללים מותאמים עבור הגשת WebP או headers מסוימים של cache.
add_filter( 'rocket_htaccess_mod_rewrite', function( $rules ) {
// Add a custom header for cached WebP images
$custom_rule = '# Serve WebP with correct content type' . PHP_EOL;
$custom_rule .= '<IfModule mod_mime.c>' . PHP_EOL;
$custom_rule .= ' AddType image/webp .webp' . PHP_EOL;
$custom_rule .= '</IfModule>' . PHP_EOL;
return $custom_rule . $rules;
} );הפילטר rocket_cache_query_strings
כברירת מחדל, WP Rocket מתעלם מ-query strings ומגיש את אותו עמוד cached בלי קשר לפרמטרים שב-URL. הפילטר הזה מורה ל-WP Rocket ליצור קבצי cache נפרדים עבור query strings מסוימים.
add_filter( 'rocket_cache_query_strings', function( $query_strings ) {
// Cache product filter pages separately
$query_strings[] = 'color';
$query_strings[] = 'size';
$query_strings[] = 'sort_by';
return $query_strings;
} );כל שילוב ייחודי של ערכי query string יקבל קובץ cache משלו. שימו לב שלא כדאי להוסיף פרמטרים עם cardinality גבוה, כמו מזהי משתמשים או timestamps, אחרת ספריית ה-cache שלכם תתנפח מהר מאוד.
הפילטר rocket_head_items
כאן תוכלו להוסיף אלמנטים מותאמים לקטע <head> עם שליטה מפורשת ב-priority. הפילטר הזה נוסף ב-WP Rocket 3.17, והוא נותן לכם שליטה מדויקת על סדר האלמנטים.
add_filter( 'rocket_head_items', function( $items ) {
// Add a preconnect hint for a third-party font CDN (priority 10 = early)
$items[] = [
'content' => '<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>',
'priority' => 10,
];
// Add a DNS prefetch for an analytics domain (priority 15)
$items[] = [
'content' => '<link rel="dns-prefetch" href="https://www.google-analytics.com">',
'priority' => 15,
];
return $items;
} );ערכי ה-priority עובדים לפי מוסכמה קבועה: preconnect ב-10, preload ב-30, וסגנונות וסקריפטים ב-50.
הגדרה תכנותית עם update_rocket_option
הפונקציה update_rocket_option() כותבת ישירות את הגדרות WP Rocket למסד הנתונים. בזמן ש-pre_get_rocket_option דורס הגדרות בזמן ריצה, הפונקציה update_rocket_option() משנה אותן באופן קבוע.
זה שימושי במיוחד בסקריפטים של onboarding בסוכנויות, כשאתם רוצים להגדיר את WP Rocket באותה צורה במספר אתרי לקוחות:
// Run once via WP-CLI: wp eval-file setup-rocket.php
if ( ! function_exists( 'update_rocket_option' ) ) {
echo 'WP Rocket is not active.';
exit;
}
// Standard agency baseline
update_rocket_option( 'minify_css', 1 );
update_rocket_option( 'minify_js', 1 );
update_rocket_option( 'delay_js', 1 );
update_rocket_option( 'lazyload', 1 );
update_rocket_option( 'remove_unused_css', 1 );
update_rocket_option( 'preload', 1 );
update_rocket_option( 'cache_mobile', 1 );
update_rocket_option( 'do_caching_mobile_files', 1 );
// Clear cache after changing settings
if ( function_exists( 'rocket_clean_domain' ) ) {
rocket_clean_domain();
}
echo 'WP Rocket configured successfully.';הריצו אותו בכל אתר:
wp eval-file setup-rocket.phpתמיד קראו ל-rocket_clean_domain() אחרי שינויים תכנותיים. אחרת קבצי ה-cache הישנים ימשיכו להיות מוגשים עם ההגדרות הקודמות.
פקודות WP-CLI של WP Rocket
WP Rocket מגיע עם חבילת WP-CLI שהופכת את ניהול ה-cache למשהו שקל לסקרפט. אלו הפקודות שאני משתמש בהן בסקריפטים של פריסה וב-cron jobs.
| פקודה | מה היא עושה |
|---|---|
wp rocket clean --confirm | ניקוי מלא של ה-cache ללא בקשת אישור |
wp rocket activate-cache | הפעלת page caching והגדרת WP_CACHE ל-true בתוך wp-config.php |
wp rocket deactivate-cache | כיבוי page caching והגדרת WP_CACHE ל-false |
wp rocket regenerate --file=advanced-cache.php | יצירה מחדש של ה-drop-in בשם advanced-cache.php |
wp rocket regenerate --file=config | יצירה מחדש של קובץ ההגדרות בתוך wp-rocket-config/ |
wp rocket preload | הפעלת זחלן ה-preload של ה-cache |
ניקוי cache מהיר אחרי עדכוני תוכן
אם יש לכם תוסף מותאם שמפרסם תוכן דרך קוד, נקו את ה-cache של אותו פוסט בלבד:
// After programmatically updating a post
wp_update_post( $post_data );
// Clear only that post's cache
if ( function_exists( 'rocket_clean_post' ) ) {
rocket_clean_post( $post_id );
}מלכודות נפוצות ב-CI/CD ובפריסות
כאן רוב המפתחים נתקלים בבעיות עם WP Rocket. התוסף נשען על שני קבצים שנוצרים דינמית ונמצאים מחוץ לתיקיית התוספים. אם תהליך הפריסה שלכם לא מתחשב בהם, ה-cache פשוט מפסיק לעבוד בלי סימן ברור.
שני הקבצים הקריטיים
wp-content/advanced-cache.php– ה-drop-in ש-WordPress טוען לפני כל תוסף. אם הקובץ הזה חסר או לא מעודכן, page caching מושבת לחלוטין.wp-content/wp-rocket-config/{domain}.php– קובץ ההגדרות שמכיל את כללי ה-cache של האתר שלכם. בלעדיו, WP Rocket לא יכול לייצר קבצי cache.
הבעיה
בפריסה טיפוסית שמבוססת על Git, כמו Capistrano, Deployer או GitHub Actions, תיקיית wp-content מוחלפת או מקבלת symlink חדש בכל deploy. התוצאה היא ש-advanced-cache.php והתיקייה wp-rocket-config/ נעלמים. WP Rocket מזהה שהקבצים חסרים ופשוט מכבה את עצמו.
הפתרון: סקריפט Post-Deploy
הוסיפו את פקודות ה-WP-CLI הבאות לסקריפט הפריסה שלכם, אחרי שהקוד כבר נמצא במקום:
#!/bin/bash
# post-deploy.sh - Run after code deployment
# Regenerate the advanced-cache.php drop-in
wp rocket regenerate --file=advanced-cache.php
# Regenerate the site config
wp rocket regenerate --file=config
# Re-enable caching (sets WP_CACHE constant)
wp rocket activate-cache
# Clear stale cache from the previous deployment
wp rocket clean --confirm
# Preload the cache so the first visitor hits a warm cache
wp rocket preloadהתקנות Bedrock / Composer
אם אתם משתמשים ב-Bedrock, הנתיב של advanced-cache.php שונה כי wp-content ממופה ל-app/. WP Rocket מטפל בזה אוטומטית בזמן ההפעלה, אבל אחרי deploy תצטרכו לייצר אותו מחדש:
wp rocket regenerate --file=advanced-cache.php --path=/srv/www/your-site/current/web/wpהגדרות staging לעומת production
שלבו את הפילטרs מסוג pre_get_rocket_option מהחלק הקודם יחד עם זיהוי סביבה. כך אותו codebase יעבוד נכון גם ב-staging וגם ב-production:
// In your mu-plugin
add_filter( 'pre_get_rocket_option_minify_css', 'savvy_staging_disable_optimization' );
add_filter( 'pre_get_rocket_option_minify_js', 'savvy_staging_disable_optimization' );
add_filter( 'pre_get_rocket_option_remove_unused_css', 'savvy_staging_disable_optimization' );
add_filter( 'pre_get_rocket_option_delay_js', 'savvy_staging_disable_optimization' );
function savvy_staging_disable_optimization( $value ) {
if ( wp_get_environment_type() !== 'production' ) {
return 0;
}
return $value;
}כך כל האופטימיזציות נשארות כבויות ב-staging וב-development, מה שהופך את ה-debugging להרבה יותר פשוט, בזמן ש-production נשאר אופטימלי.
Debugging ל-WP Rocket
כשעמודים לא נשמרים ב-cache או כשהאופטימיזציות לא מיושמות, בואו נראה איך אפשר להבין מה קורה.
1. בדקו את מקור ה-HTML
צפו במקור העמוד באמצעות Ctrl+U או Cmd+U, וגללו עד לתחתית. WP Rocket מוסיף הערת HTML כשהעמוד מוגש מתוך cache:
<!-- This website is like a rocket, isn't it? Performance optimized by WP Rocket. -->
<!-- Last modified: 2026-03-19 12:34:56 -->אם ההערה הזו לא קיימת, העמוד לא נשמר ב-cache. אם ה-timestamp לא משתנה בין רענונים, סימן שה-cache עובד.
2. הפעילו את WP_ROCKET_DEBUG
הוסיפו את זה ל-wp-config.php כדי להפעיל את לוג ה-debug של WP Rocket:
define( 'WP_ROCKET_DEBUG', true );זה מפעיל את ה-logger הפנימי. הלוגים נשמרים בתוך wp-content/wp-rocket-config/. שימו לב שצריך לכבות זאת ב-production, כי מחלקות ה-logger מוסיפות overhead כשהן פעילות.
3. עבודת בילוש סביב DONOTCACHEPAGE
הסיבה הנפוצה ביותר לכך שעמוד לא נשמר ב-cache היא שתוסף או תבנית אחרים מגדירים את DONOTCACHEPAGE. כדי למצוא את האשם, הוסיפו זמנית את ה-snippet הבא:
add_action( 'template_redirect', function() {
if ( defined( 'DONOTCACHEPAGE' ) && DONOTCACHEPAGE ) {
error_log( 'DONOTCACHEPAGE is set. Backtrace: ' . wp_debug_backtrace_summary() );
}
}, PHP_INT_MAX );בדקו את לוג ה-debug שלכם, wp-content/debug.log, וה-backtrace יראה לכם בדיוק איזה תוסף או פונקציה הגדירו את הקבוע הזה.
4. צ'קליסט – למה העמוד שלי לא נשמר ב-cache?
עברו על הרשימה הבאה כשאתם פותרים תקלה:
- האם המשתמש מחובר? משתמשים מחוברים מקבלים כברירת מחדל עמודים ללא cache.
- האם מוגדר
DONOTCACHEPAGE? השתמשו ב-snippet שלמעלה. - האם
advanced-cache.phpקיים ומכיל קוד של WP Rocket? בדקו באמצעותhead -5 wp-content/advanced-cache.php. - האם
WP_CACHEמוגדר כ-trueבתוךwp-config.php? - האם ה-URL תואם לתבנית כלשהי ב-Advanced Rules > Never Cache URLs?
- האם קיימת החרגה מבוססת cookie? בדקו את ההגדרה Never Cache Cookies.
- האם לתיקיית ה-cache יש הרשאות כתיבה תקינות? WP Rocket צריך לכתוב לתוך
wp-content/cache/.
תוכן דינמי ומוקשים ב-WooCommerce
Page cache מלא ותוכן דינמי פשוט לא מסתדרים טוב יחד. כש-WP Rocket שומר עמוד ב-cache, כל גולש רואה את אותו HTML. אם העמוד שלכם מציג מידע ייחודי למשתמש דרך PHP, הגולשים יקבלו תוכן ישן או פשוט לא נכון.
הכלל: PHP למבנה, AJAX להתאמה אישית
כל תוכן שמשתנה בין משתמשים, כמו כמות פריטים בעגלה, wishlist, מוצרים שנצפו לאחרונה או ברכות למשתמשים מחוברים, חייב להיטען דרך JavaScript/AJAX אחרי שהעמוד ה-cached נטען. אם תרנדרו אותו ב-PHP, WP Rocket ישמור ב-cache את הגרסה של הגולש הראשון ויגיש אותה לכולם.
WooCommerce: get_refreshed_fragments
WooCommerce משתמש ב-endpoint של AJAX בשם wc-ajax=get_refreshed_fragments כדי לעדכן את המיני-עגלה אחרי טעינת העמוד. WP Rocket מבצע כאן אופטימיזציה על ידי שמירת תגובת ה-fragments ב-cache כשהעגלה ריקה.
אם המיני-עגלה שלכם מציגה כמות שגויה או לא מתעדכנת, כבו את האופטימיזציה:
add_filter( 'pre_get_rocket_option_cache_wc_ajax', '__return_zero' );ניקוי cache בזמן checkout
כשמתבצעת הזמנה ב-WooCommerce, WP Rocket מנקה את ה-cache של כל מוצר בהזמנה ושל כל הקטגוריות שמשויכות אליו. בחנויות שבהן מוצרים משויכים להרבה קטגוריות, הפעולה הזאת עלולה להאט את תהליך ה-checkout עצמו.
אם שמתם לב ל-checkout איטי, כבו את הניקוי האוטומטי וטפלו בזה ידנית דרך event מתוזמן:
// Disable automatic cache clearing on WooCommerce status changes
add_filter( 'rocket_post_invalidation_wc_product', '__return_false' );
// Schedule a single bulk cache clear instead
add_action( 'woocommerce_order_status_completed', function( $order_id ) {
if ( ! wp_next_scheduled( 'savvy_delayed_cache_clear' ) ) {
wp_schedule_single_event( time() + 300, 'savvy_delayed_cache_clear' );
}
} );
add_action( 'savvy_delayed_cache_clear', function() {
if ( function_exists( 'rocket_clean_domain' ) ) {
rocket_clean_domain();
}
} );ניטור ביצועים באמצעות קוד
WP Rocket מפעיל כמה action hooks במהלך פעולות cache. אתם יכולים להשתמש בהם כדי לנטר את התנהגות ה-cache ולזהות בעיות עוד לפני שהגולשים שמים לב אליהן.
לוג של אירועי ניקוי cache
אם נראה לכם שה-cache מתנקה לעתים קרובות מדי, רשמו כל אירוע invalidation ללוג כדי להבין מה גורם לזה:
add_action( 'rocket_clean_domain', function() {
error_log( '[WP Rocket] Full domain cache cleared. Backtrace: ' . wp_debug_backtrace_summary() );
} );
add_action( 'rocket_clean_post', function( $post_id ) {
$title = get_the_title( $post_id );
error_log( "[WP Rocket] Cache cleared for post #{$post_id}: {$title}" );
} );עברו על wp-content/debug.log כדי לזהות איזה תוסף, cron job או פעולה של משתמש מנקים את ה-cache. ניקויים תכופים של כל הדומיין הם נורת אזהרה, כי הם מאלצים את WP Rocket לבנות מחדש את כל ה-cache מאפס.
ניטור התקדמות זחלן ה-preload
אחרי ניקוי ה-cache, זחלן ה-preload של WP Rocket בונה אותו מחדש על ידי ביקור בכל URL. באתרים גדולים זה יכול לקחת שעות. כך תוכלו לעקוב אחרי התור:
# Check how many URLs are in the preload queue
wp db query "SELECT COUNT(*) as pending FROM $(wp db prefix)wpr_rocket_cache WHERE status = 'pending'" --skip-column-namesאם אתם רואים שתור ה-preload אף פעם לא מגיע לאפס, בדקו אם קיימות לולאות הפניה, עמודים מוגני סיסמה או כתובות URL שמחזירות סטטוס שאינו 200. כל אלו תוקעים את הזחלן ומונעים טעינת preload של כתובות אחרות.
שאלות נפוצות
שאלות נפוצות על שימוש תכנותי ב-WP Rocket:
rocket_cache_reject_uri כדי להחריג את תבנית ה-URL של אותו סוג תוכן. למשל, אם ה-slug של ה-CPT שלכם הוא portfolio, הוסיפו:add_filter( 'rocket_cache_reject_uri', function( $uris ) {
$uris[] = '/portfolio/(.*)';
return $uris;
} );כך WP Rocket לא ישמור ב-cache שום URL שמתחיל ב-/portfolio/.rocket_clean_post( $post_id ) כדי לנקות את ה-cache של פוסט מסוים, או ל-rocket_clean_domain() כדי לנקות את כל האתר. תמיד עטפו את הקריאה בתוך function_exists() כדי שהקוד לא יישבר אם WP Rocket יכובה. מקמו את הקריאה בתוך callback של ה-AJAX handler שלכם אחרי שהנתונים עודכנו.rocket_cache_reject_uri:$uris[] = '/wp-json/my-plugin/v1/(.*)';data-no-optimize="1" לתגית <script> שלכם. WP Rocket מכבד את המאפיין הזה וידלג על הסקריפט בזמן minification, שילוב ודחייה. למשל:<script data-no-optimize="1">myCode();</script>זה עובד גם עבור סקריפטים inline וגם עבור סקריפטים חיצוניים.pre_get_rocket_option_{option} יחד עם wp_get_environment_type(). הגדירו WP_ENVIRONMENT_TYPE בתוך wp-config.php עבור כל סביבה, ואז החזירו בצורה מותנית 0 עבור פיצ'רים שתרצו לכבות ב-staging. הגישה הזאת מאפשרת לאותו codebase לעבוד נכון בכל הסביבות.advanced-cache.php וקובץ ההגדרות שבתוך wp-rocket-config/. אם תהליך הפריסה שלכם מחליף או מנקה את wp-content, הקבצים האלה ייעלמו וה-cache יפסיק לעבוד. הפתרון הוא להריץ את הפקודות הבאות בסקריפט ה-post-deploy שלכם:wp rocket regenerate --file=advanced-cache.php
wp rocket regenerate --file=configסיכום
הממשק של WP Rocket מכסה את הבסיס, אבל הכוח האמיתי נמצא בפילטרים ובכלי ה-CLI שלו. משפחת הפילטרs pre_get_rocket_option לבדה מאפשרת לכם לשלוט בצורה מותנית בכל הגדרה לפי סוג העמוד, תפקיד המשתמש או הסביבה.
אם תשלבו את זה עם פקודות WP-CLI בתוך סקריפטי הפריסה שלכם, תקבלו מערך cache שעובד יציב גם ב-staging, גם ב-production וגם בתהליכי CI/CD.
ברוב אתרי הלקוחות אני מחזיק mu-plugin אחד עם 5-10 filters של WP Rocket. לוקח בערך 15 דקות להגדיר אותו, והוא חוסך אחר כך שעות של קליקים בממשק ושל debugging. אם אתם מנהלים יותר מאתר וורדפרס אחד, לגמרי שווה לאמץ את הגישה הזאת.

