חיפוש ]

הוספת נכסים (קבצי Javascript ו- CSS) באתרי וורדפרס

הוספת קבצי CSS ו-JavaScript חיצוניים לאתר וורדפרס היא פעולה נפוצה, אך חשוב מאוד לעשות אותה בצורה הנכונה. במקום לשלב תגיות <link> או <script> ישירות בקבצי התבנית, וורדפרס מספקת שיטה בטוחה ומובנית שנקראת enqueueing.

במדריך זה נראה כיצד לטעון קבצי CSS ו-JavaScript בצורה נכונה, כיצד להימנע מטעויות נפוצות, ואיך להשתמש באפשרויות החדשות כמו הפרמטר strategy שהתווסף לאחרונה לגרסאות וורדפרס.

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

מה זה בעצם Enqueueing?

Enqueueing הוא תהליך של רישום וטעינת נכסים (כמו קבצי CSS ו-JavaScript) באמצעות פונקציות של וורדפרס. שיטה זו שומרת על סדר, מכבדת תלות בין קבצים, ודואגת שכל נכס ייטען רק פעם אחת ובמיקום הנכון.

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

טעינת jQuery ממקורות שונים או הוספה ידנית של סקריפטים עלולה לגרום לבעיות חמורות. וורדפרס פותרת זאת על ידי ניהול מסודר של טעינת נכסים.

איך לטעון CSS בוורדפרס

בכדי לטעון קובץ CSS בתבנית או בתוסף, השתמשו בפונקציה wp_enqueue_style(). הנה דוגמה פשוטה:

function my_enqueue_styles() {
    wp_enqueue_style( 'reset-css', get_template_directory_uri() . '/reset.css' );
    wp_enqueue_style( 'theme-style', get_stylesheet_uri(), array( 'reset-css' ) );
}
add_action( 'wp_enqueue_scripts', 'my_enqueue_styles' );

בפונקציה זו:

  • 'reset-css' הוא שם ייחודי (handle) לנכס
  • get_template_directory_uri() מחזיר את כתובת התבנית
  • get_stylesheet_uri() מפנה לקובץ style.css
  • array( 'reset-css' ) מבטיח שקובץ reset.css ייטען לפני style.css

הפרמטרים של wp_enqueue_style

wp_enqueue_style( $handle, $src, $deps, $ver, $media );
  • $handle: שם ייחודי לנכס
  • $src: כתובת ה-CSS
  • $deps: מערך של תלות בקבצים אחרים
  • $ver: גרסה, משמשת לביטול קאש
  • $media: סוג המדיה (כמו all, screen, print)

איך לטעון JavaScript בוורדפרס

כדי לטעון סקריפט, השתמשו בפונקציה wp_enqueue_script(). הנה דוגמה טיפוסית הכוללת תלות וגם שימוש באופציית strategy:

function my_enqueue_scripts() {
    wp_enqueue_script( 'owl-carousel', get_template_directory_uri() . '/owl.carousel.js', array( 'jquery' ) );

    wp_enqueue_script( 'theme-scripts', get_template_directory_uri() . '/website-scripts.js', array( 'owl-carousel', 'jquery' ), '1.0', array(
        'in_footer' => true,
        'strategy'  => 'defer',
    ) );
}
add_action( 'wp_enqueue_scripts', 'my_enqueue_scripts' );

במקרה זה וורדפרס תוודא:

  • jQuery ייטען לפני Owl Carousel
  • Owl Carousel ייטען לפני הסקריפט שלכם
  • הסקריפט האחרון יופיע בפוטר עם מאפיין defer

הפרמטרים של wp_enqueue_script() דומים מאוד לאלו של wp_enqueue_style(), עם תוספת חשובה – האפשרות להעביר מערך פרמטרים מתקדמים לפרמטר האחרון.

wp_enqueue_script( $handle, $src, $deps, $ver, $args );
  • $handle: שם ייחודי לסקריפט. חובה להיות שונה מכל נכס אחר באתר.
  • $src: הנתיב או ה-URL לקובץ ה-JavaScript.
  • $deps: מערך של שמות סקריפטים אחרים שעליהם הסקריפט תלוי (למשל 'jquery').
  • $ver: מספר גרסה של הקובץ – שימושי לניהול קאש.
  • $args: יכול להיות אחד מהשניים:
    • true או false – לציון האם לטעון את הסקריפט בפוטר (שיטה ישנה).
    • array – מערך מתקדם שיכול לכלול:
      • 'in_footer': בוליאן שמציין אם לטעון בפוטר (true) או בהדר (false).
      • 'strategy': ערכים אפשריים – 'defer' או 'async' – לציון אופן טעינת הסקריפט בדפדפן.

שימוש במערך פרמטרים במקום true/false מאפשר שליטה מדויקת יותר על מיקום ואופן טעינת הסקריפט, במיוחד לשיפור ביצועים.

טעינת נכסים רק בתבניות עמוד ספציפיות

לפעמים נרצה לטעון סקריפט או עיצוב רק בדפים שמשתמשים בתבנית מסוימת, לדוגמה page-about.php. במקום לטעון את הקובץ בכל האתר, נרשום אותו מראש ונבצע טעינה רק אם התנאי מתקיים.

קודם כל נרשום את הסקריפט באמצעות wp_register_script():

function my_register_assets() {
    wp_register_script( 'popup-script', get_template_directory_uri() . '/popup.js', array(), '1.0', array(
        'in_footer' => true,
        'strategy'  => 'defer',
    ) );
}
add_action( 'wp_enqueue_scripts', 'my_register_assets' );

לאחר מכן נטען אותו רק אם תבנית העמוד היא page-about.php:

function my_enqueue_template_assets() {
    if ( is_page_template( 'page-about.php' ) ) {
        wp_enqueue_script( 'popup-script' );
    }
}
add_action( 'wp_enqueue_scripts', 'my_enqueue_template_assets' );

שיטה זו תבטיח שהסקריפט ייטען רק בדפים הרלוונטיים, וכך תמנעו מעומס מיותר בשאר האתר.

הסרה של קבצים מיותרים

אם תבנית או תוסף טוענים קבצים שאינכם צריכים, תוכלו להסיר אותם באמצעות הפונקציות הבאות:

  • wp_dequeue_script()
  • wp_dequeue_style()
  • wp_deregister_script()
  • wp_deregister_style()
function remove_extra_assets() {
    wp_dequeue_style( 'plugin-css' );
    wp_deregister_script( 'plugin-js' );
}
add_action( 'wp_enqueue_scripts', 'remove_extra_assets', 100 );

שימו לב לערך 100 בפרמטר השלישי של add_action(). זהו ה-priority של ההוק, כלומר אנחנו מבקשים להריץ את הפונקציה לאחר שכל שאר התבניות והתוספים כבר רשמו וטעינו את הקבצים שלהם. אם תגדירו מספר נמוך יותר, ייתכן והקבצים שתרצו להסיר עדיין לא ייטענו ולכן לא תוכלו להסירם.

למידע מלא כולל הסברים ודוגמאות נוספות, קראו את הפוסט המלא על איך להסיר קבצי CSS ו-JS שתוספים ותבניות טוענים אוטומטית.

סיכום

שימוש נכון ב wp_enqueue_style() ו־wp_enqueue_script() מאפשר לשמור על אתר מודולרי, מהיר ונקי מקונפליקטים. וורדפרס תטפל עבורכם בתלויות, תוודא שאין כפילויות, ותשפר את התאימות בין תוספים ותבניות.

אל תשתמשו ישירות בתגיות <script> או <link> בתבנית. תמיד תטעינו קבצים דרך מנגנון ההרשמה והטעינה של וורדפרס.

  • יהודה 5 יוני 2017, 12:05

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

    יש תוספים מתאימים – אבל לא ממש מוצלחים. הדרך בה בסוף בחרתי היא שימוש ב – conditional tags, ואם התנאי מתקיים אז מתבצעת הקריאה ל-wp_enqueue_script.

    אבל אני לא מת על זה… התנאי שבחרתי הוא לפי ה – slug של הדף, והוא עלול להשתנות. גם על ID אני לא סומך לטווח ארוך, והוא גם לא ממש מבהיר לי באיזה דף מדובר רק ממבט על ה-ID. הכי הייתי רוצה לשלוט בזה דווקא דרך ה-ADMIN ולא דרך הקוד, כי אז רואים ממש בעיניים מהם הסקריפטים שכל דף קורא להם.
    מכיר דרך מומלצת להוספת נכסים כזו?

    תודה 🙂 יהודה

    • רועי יוסף 5 יוני 2017, 12:24

      היי יהודה, תודה 🙂

      הדרך הנכונה היא כפי שאתה מבצע, conditional tag לפי ה slug. אני חושב שאתה צריך לסמוך על ה slug לטווח ארוך.. אין לשנות אותו בעיקרון לאחר שנקבע.

      ניתן לבצע זאת דרך האדמין באמצעות advanced custom fields לדוגמא אך זו לא הדרך הנכונה והיא מאד מסורבלת. השאר בדרך בה אתה עושה זאת. אין לי תוסף מומלץ שמבצע זאת בצורה פשוטה בארסנל..

      • יהודה 5 יוני 2017, 13:10

        תודה על התשובה!
        וגם אם לא למדתי ממנה משהו חדש, לפעמים סתם כיף לשמוע שאתה עושה דברים נכון 🙂

      • יהודה 9 יוני 2017, 19:33

        בהמשך לנ"ל: עליתי על שני תוספים שמאפשרים שליטה גרנולרית בסקריפטים וסטיילים, פר סקריפט/סטייל ופר פוסט/קטגוריה וכו'. האחד חינמי, ונראה שעובד רק על פלאגינים (טוען את הפלאגין רק בעמודים שצריך):

        https://wordpress.org/plugins/plugin-organizer

        השני בכסף, ונראה שמאפשר כנראה שליטה טובה אף יותר:

        https://tomasz-dobrzynski.com/wordpress-gonzales

        שניהם מהסעיף האחרון במאמר התותחי של סמאשינג:

        https://www.smashingmagazine.com/2017/06/better-faster-optimized-wordpress-websites

        לא בטוח אם יתאימו לצרכיי, אבל טובים לשימוש בכל מקרה 🙂

        • רועי יוסף 10 יוני 2017, 1:00

          אני משתמש ב Plugin Organizer … כתבתי על כך גם מאמר ואני ממליץ על הפלאגין בחום 🙂

  • אלון גולדמן 31 דצמבר 2018, 17:15

    היי, משהו שחשוב להוסיף:

    אפשר לרשום נכסים ולהוסיף אותם רק במידת הצורך – אבל אי אפשר להוסיף נכסים בtemplate כלשהי. (אפשרי, אבל עובד רק חלק מהפעמים, ועושה בעיות). לכן אם רוצים להוסיף נכסים ספציפיים שלא יטענו בכל האתר, אלא רק בדפים מסויימים – אפשר בתוך קובץ functions.php להוסיף תנאים, למשל:

    if (is_singular()) { ... }

    לכל התנאים הלוגיים אפשר לראות כאן:
    https://codex.wordpress.org/Conditional_Tags

    חוץ מזה, תודה על הפוסט! עזר לי מאוד!

    • רועי יוסף 31 דצמבר 2018, 17:35

      תוספת חשובה ובהחלט זו הדרך הנכונה להוסיף נכסים, רק עבור התבנית הרלוונטית עבור אותו נכס.

      תודה! 🙂

  • שני 6 מרץ 2019, 0:29

    "נניח ותרצו למנוע מתוסף כלשהו טעינה של CSS מסויים, זהו תהליך מאד פשוט ברגע שאת יודעים מה ה handle" – מה זה ואיך מוצאים את ה handle?
    תודה!

    • רועי יוסף 6 מרץ 2019, 1:10

      היי שני 🙂

      את צריכה למצוא היכן מתבצעת הקריאה לקובץ וזה דורש נבירה וחיפוש בקוד עצמו. בדרך זה בקובץ functions.php, אך אם זה תוסף עלייך לחפש בקוד התוסף. הסבר על מה זה handle קיים בפוסט אך הנה דוגמה:

      	wp_enqueue_style( 'theme-style', get_stylesheet_uri(), array( 'reset' ) );

      במקרה הזה, ה handle הוא theme-style.

  • רוב 16 יוני 2019, 12:19

    אם אני רוצה להסיר קריאה לגוגל פונט שהערכה מעלה, זה הקוד הנכון?

    function my_assets() {
    	wp_deregister_style( 'zien_fonts-css' );
    }
    
    add_action( 'wp_dequeue_style', 'my_assets' );

    zien_fonts-css זה ה-ID שיש בו את הקריאה לגוגל פונט.

    • רועי יוסף 16 יוני 2019, 13:57

      לא – הקוד הנכון הוא:

      function my_assets() {
      	wp_deregister_style( 'zien_fonts-css' );
      }
      
      add_action( 'wp_enqueue_scripts', 'my_assets' );
      • רוב 16 יוני 2019, 14:07

        תודה, בתוך הפונקציה אני יכול להוסיף עוד קריאות כמו:

        wp_deregister_style( 'zien_fonts-css' );

        ולשנות את ה-ID למה שצריך?

  • עדי 5 יולי 2020, 14:36

    סליחה על הבורות המוגזמת שלי,

    אבל איפה אני מוסיפה את זה? מתוך הלוח בקרה של וורדפרס לאן אני צריכה ללכת? או בקבצים של השרת? כי בתכלס יש לי את ה html, css, js ואין לי מושג איפה אני שמה אותם…

    אם זה ארוך ולא קשור אשמח גם כן לדעת:)

    • רועי יוסף 14 יולי 2020, 2:33

      היי עדי 🙂
      סליחה על התגובה המאוחרת, אנא חדדי את השאלה – מה את מנסה בדיוק לעשות (מה מטרתך)?

  • עדי 17 ינואר 2021, 12:14

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

    • רועי יוסף 17 ינואר 2021, 14:13

      היי עדי,

      תוסיפי את הקוד הבא בקובץ functions.php של התבנית שלך והכניסי את הסקריפט שקיבלת היכן שסימנתי (שימי לב לא להוסיף את תגית ה PHP  הפותחת). בהצלחה! 🙂

      <?php //do not add this opening php tag
      function add_activetrail_script() {
          ?>
          //    הכניסי כאן את הסקריפט
          <?php
      }
      add_action( 'wp_head', 'add_activetrail_script' );
      • עדי 17 ינואר 2021, 19:54

        כמו שאמרתי לא ממש מבינה בקוד.. איך אני מגיעה לקובץ functions.php של התבנית? אתה אולי מכיר את אקטיב טרייל ויודע לעזור לי עם זה? – אני מנסה להטמיע פופ-אפ אבל פעם שעברה זה עשה לי בעיות באתר- אשמח לדעת איך אני יכולה לשים את הקוד מבלי לפגוע בדברים אחרים באתר, ובמידת הצורך איך להחזיר את האתר למה שהוא היה לפני הקוד..

        • רועי יוסף 17 ינואר 2021, 19:56

          שלחי לי דרך עמוד צור קשר הודעה ואעזור לך…

  • אודליה גבאי 14 מרץ 2023, 18:34

    היי רועי,
    אשמח לדעת איך אוכל לשנות תצוגת תאריך של תיבת Date
    כשהמשתמש מזין תאריך בתיבה ואני רוצה להציג את זה בדף זה מציג לי את התאריך הפוך.
    תודה מראש!

    • אודליה גבאי 14 מרץ 2023, 18:35

      סורי נחתכה ההודעה התכוונתי לתגית

      <input type="date">
  • טובית 12 מאי 2024, 11:09

    הי,
    אני מכירה את הדרך של כתיבה מאפס עם תיקייה שמכילה את כל סוגי הקבצים אבל פחות את ההקמה עם וורדפרס וקישור קבצים חיצוניים לשם אז אני רוצה לוודא שהבנתי נכון – אם אני רוצה לקשר קבצי css ו js חיצוניים לאתר שבניתי בוורדפרס עם אלמנטור אז אני צריכה להיכנס ל functions.php בתבנית הבת ולהדביק שם קודם את הקוד הזה:

    function my_assets() {
    	wp_register_script( 'owl-carousel', get_stylesheet_directory_uri() . '/owl.carousel.js', array( 'jquery' ) );
    	wp_enqueue_script( 'owl-carousel' );
    }
    
    add_action( 'wp_enqueue_scripts', 'my_assets' );

    ואחריו את הקוד הזה:

    function my_assets() {
    	wp_enqueue_style( 'theme-style', get_stylesheet_uri(), array( 'reset' ) );
    	wp_enqueue_style( 'reset', get_stylesheet_directory_uri() . '/reset.css' );
    
    	wp_enqueue_script( 'owl-carousel', get_stylesheet_directory_uri() . '/owl.carousel.js', array( 'jquery' ) );
    	wp_enqueue_script( 'theme-scripts', get_stylesheet_directory_uri() . '/website-scripts.js', array( 'owl-carousel', 'jquery' ), '1.0', true );
    }
    
    add_action( 'wp_enqueue_scripts', 'my_assets' );

    וזה יספיק כדי להמשיך לכתוב קוד בקבצים החיצוניים והם תמיד יתעדכנו בכל עמודי האתר?
    אחרי הקוד השני אני צריכה לכתוב גם את הקישור לקבצים החיצוניים שלי?

    • רועי יוסף 12 מאי 2024, 14:53

      היי טובית,

      בכדי לעשות זאת פשוט יותר, תוותרי בשלב הנוכחי על השימוש ב wp_register_script. הקוד השני יעבוד מצויין בפני עצמו בהנחה והקבצים קיימים בפועל בתיקייה הראשית של התבנית שלך. במידה וכן, אז קבצים אלו ייטענו בכל עמוד ועמוד באתר שלך.

      למה את מתכוונת במשפט האחרון? לאיזה קבצים חיצוניים את מתכוונת?

    • טובית 12 מאי 2024, 17:26

      הכוונה לקובץ css וקובץ js שאני כותבת עם ויזואל סטודיו ורוצה לקשר לאתר שבנוי בוורדפרס. בעיקרון בשעה האחרונה הצלחתי להבין איך עובדים עם התג custom code של אלמנטור אבל אני בכל זאת רוצה לדעת גם איך לקשר קובץ חיצוני. אז אתה אומר שהקובצים עצמם של css או js צריכים להיות ממוקמים בתיקייה הראשית של תבנית הבת ואז הקוד השני שלך אמור לטעון אותם כדי שהם ישפיעו על כל האתר?

תגובה חדשה

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

Savvy WordPress Development official logo