חיפוש

WP Rocket למפתחים: Filters, Snippets וטיפים לפריסה

אם השתמשתם בעבר ב-WP-Rocket, אתם בטח כבר יודעים למה הוא נחשב לאחד מתוספי ה-cache הפופולריים ביותר לוורדפרס – הוא פשוט עובד טוב כברירת מחדל.

אבל אם אתם מנהלים אתרי לקוחות, עובדים עם פריסות CI/CD או צריכים לוגיקת cache מותנית, בשלב מסוים הממשק של התוסף כבר לא יספיק.

הפוסט הזה הוא ההמשך הטכני והמעשי של מדריך ההגדרות שלי ל-WP Rocket. כאן אני נכנס לפילטרים, פקודות WP-CLI, סקריפטים לפריסה וטכניקות debugging שאני משתמש בהן באתרים אמיתיים. אם אתם מרגישים בנוח עם PHP וטרמינל, הפוסט הזה נכתב בדיוק בשבילכם.

איפה לשים את הקוד שלכם

לפני שאתם מוסיפים 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 פשוט מפסיק לעבוד בלי סימן ברור.

שני הקבצים הקריטיים

  1. wp-content/advanced-cache.php – ה-drop-in ש-WordPress טוען לפני כל תוסף. אם הקובץ הזה חסר או לא מעודכן, page caching מושבת לחלוטין.
  2. 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?

עברו על הרשימה הבאה כשאתם פותרים תקלה:

  1. האם המשתמש מחובר? משתמשים מחוברים מקבלים כברירת מחדל עמודים ללא cache.
  2. האם מוגדר DONOTCACHEPAGE? השתמשו ב-snippet שלמעלה.
  3. האם advanced-cache.php קיים ומכיל קוד של WP Rocket? בדקו באמצעות head -5 wp-content/advanced-cache.php.
  4. האם WP_CACHE מוגדר כ-true בתוך wp-config.php?
  5. האם ה-URL תואם לתבנית כלשהי ב-Advanced Rules > Never Cache URLs?
  6. האם קיימת החרגה מבוססת cookie? בדקו את ההגדרה Never Cache Cookies.
  7. האם לתיקיית ה-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:

כיצד מכבים את WP Rocket עבור Custom Post Type מסוים?
השתמשו ב-filter בשם 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/.
כיצד מנקים cache בצורה תכנותית אחרי פעולת AJAX מותאמת?
קראו ל-rocket_clean_post( $post_id ) כדי לנקות את ה-cache של פוסט מסוים, או ל-rocket_clean_domain() כדי לנקות את כל האתר. תמיד עטפו את הקריאה בתוך function_exists() כדי שהקוד לא יישבר אם WP Rocket יכובה. מקמו את הקריאה בתוך callback של ה-AJAX handler שלכם אחרי שהנתונים עודכנו.
האם אפשר להשתמש ב-WP Rocket יחד עם Redis או Memcached עבור object cache?
כן. WP Rocket מטפל ב-page caching, כלומר קבצי HTML סטטיים, בזמן ש-Redis או Memcached מטפלים ב-object cache, כלומר תוצאות של שאילתות למסד הנתונים. הם עובדים בשכבות שונות ומשלימים זה את זה. תוכלו להתקין תוסף object cache כמו Redis Object Cache לצד WP Rocket בלי שום התנגשות.
כיצד מחריגים endpoint מסוים של REST API מה-cache?
WP Rocket לא שומר בקשות של REST API ב-cache כברירת מחדל, ולכן בדרך כלל אין צורך להחריג אותן. אם אתם משתמשים ב-route מותאם שבכל זאת נשמר ב-cache, למשל דרך cache ברמת השרת כמו Varnish, הוסיפו את ה-route לרשימת Never Cache URLs או השתמשו ב-filter rocket_cache_reject_uri:
$uris[] = '/wp-json/my-plugin/v1/(.*)';
כיצד מונעים מ-WP Rocket לשנות את תגיות ה-inline script שלי?
הוסיפו את המאפיין data-no-optimize="1" לתגית <script> שלכם. WP Rocket מכבד את המאפיין הזה וידלג על הסקריפט בזמן minification, שילוב ודחייה. למשל:
<script data-no-optimize="1">myCode();</script>
זה עובד גם עבור סקריפטים inline וגם עבור סקריפטים חיצוניים.
כיצד מחילים הגדרות שונות של WP Rocket ב-staging לעומת production?
השתמשו ב-filter מסוג pre_get_rocket_option_{option} יחד עם wp_get_environment_type(). הגדירו WP_ENVIRONMENT_TYPE בתוך wp-config.php עבור כל סביבה, ואז החזירו בצורה מותנית 0 עבור פיצ'רים שתרצו לכבות ב-staging. הגישה הזאת מאפשרת לאותו codebase לעבוד נכון בכל הסביבות.
האם WP Rocket נשבר אחרי פריסת קוד דרך Git?
זה בהחלט יכול לקרות. WP Rocket תלוי בשני קבצים שנוצרים דינמית: 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. אם אתם מנהלים יותר מאתר וורדפרס אחד, לגמרי שווה לאמץ את הגישה הזאת.

דיון ותגובות
0 תגובות  ]

השאירו תגובה

הוסיפו קוד באמצעות הכפתורים מטה. למשל, בכדי להוסיף PHP לחצו על הכפתור PHP והוסיפו את הקוד בתוך השורטקוד. מצאתם שגיאה בפוסט? עדכנו אותנו...

Savvy WordPress Development official logo