החל מגרסת וורדפרס 6.5, גרסת ה-Major הראשונה ל-2024, אשר עתידה לצאת ב-26 למרץ, נוכל להגדיר תלויות תוספים.
בדומה לפיצ׳רים קודמים כמו גוטנברג, גם הפיצ׳ר הזה פותח כתוסף נפרד וכעת הוחלט למזג אותו לליבה של וורדפרס.
מה זה תלויות תוספים
נניח שאנחנו מפתחים תוסף אשר מרחיב את הפונקציונליות של ווקומרס, הגיוני שהתוסף שלנו לא יוכל לעבוד אם ווקומרס לא מותקן, לכן היינו צריכים לעשות בדיקה בקוד שווקומרס מותקן ופעיל על מנת שנפעיל את הפונקציונליות של התוסף שלנו.
אך החל מגרסת 6.5 של וורדפרס נוכל לנצל מנגנון חדש אשר יאפשר לנו להודיע שהתוסף שלנו תלוי בתוספים אחרים בשורת קוד אחת 🤓.
הגדרת תלויות תוסף
כאמור לפני גרסה 6.5 של וורדפרס היינו אמורים לממש מנגנון אשר בודק שהתוסף מותקן ופעיל ומתריע במידה ולא.
<?php
/**
* Plugin Name: Test Plugin
* Description: Just a simple test plugin by dorzki
* Author: dorzki
* Version: 1.0.0
* Requires PHP: 7.4
*/
defined( 'ABSPATH' ) || exit;
/**
* Checks if the necessary dependencies are satisfied for the Test Plugin.
*
* @return void
*/
function dorzki_test_plugin_check_dependencies(): void {
if ( ! in_array( 'woocommerce/woocommerce.php', apply_filters( 'active_plugins', get_option( 'active_plugins' ) ), true ) ) {
add_action( 'admin_notices', 'dorzki_missing_dependencies_notice' );
return;
}
include_once 'class-plugin.php';
}
add_action( 'plugins_loaded', 'dorzki_test_plugin_check_dependencies' );
/**
* Displays a notice stating the missing dependencies for the "Test Plugin".
*
* @return void
*/
function dorzki_missing_dependencies_notice(): void {
$notice = sprintf(
/* translators: 1: WooCommerce 2: Plugin Name */
esc_html__( '"%1$s" is required to be installed and activated in order to use "%2$s".', 'dorzki-test-plugin' ),
'<strong>' . esc_html__( 'WooCommerce', 'dorzki-test-plugin' ) . '</strong>',
'<strong>' . esc_html__( 'Test Plugin', 'dorzki-test-plugin' ) . '</strong>'
);
echo wp_kses_post( "<div class='notice notice-error'><p>{$notice}</p></div>" );
}
הקוד הנ״ל בודק האם ווקומרס מותקן ומופעל, במידה וכן הוא יטען את הקוד של התוסף, במידה ולא תוצג התראה בממשק הניהול על כך.
החל מגרסה 6.5 נוכל להשתמש בקוד הבא על מנת להכריז על תלות ולהציג שגיאה במידה ולא קיים.
<?php
/**
* Plugin Name: Test Plugin
* Description: Just a simple test plugin by dorzki
* Author: dorzki
* Version: 1.0.0
* Requires PHP: 7.4
* Requires Plugins: woocommerce
*/
defined( 'ABSPATH' ) || exit;
include_once 'class-plugin.php';
אז מה שונה בעצם? פשוט – במקום כל הקוד למעלה, הוספנו שורה בהערה אשר מכילה את פרטי התוסף והשתמש בשורה Requires Plugins
על מה להגדיר את תלויות התוסף.
שימו לב שהערך של Requires Plugins הוא בעצם רשימה של מזהי תוסף (Slug) מופרדים בפסיק.
כעת אם נתקין את התוסף שלנו באתר המריץ גרסת 6.5 של וורדפרס או יותר, נראה את ההתראה הבאה:
רק לאחר שנתקין את התלויות החסרות, נוכל להפעיל את התוסף.
מגבלות של תלויות תוספים
יש כמה דברים שחשוב לדעת בהקשר של תלויות תוספים:
- לא ניתן להתקין תוסף עם תלויות כל עוד התלויות שלו לא מותקנות.
- לא ניתן להפעיל תוסף עם תלויות כל עוד התלויות שלו לא מופעלות.
- לא ניתן לכבות את התלויות של התוסף כל עוד התוסף שצורך אותם מופעל.
- לא ניתן למחוק את התלויות של התוסף כל עוד התוסף שצורך אותם מותקן.
פרט לרשימה הנ״ל, חשוב לדעת כי תוסף אשר ידרוש תוספים אשר לא קיימים במאגר של וורדפרס, לא יהיה ניתן לאכוף את התלויות הללו ולכן לא מומלץ להשתמש בפיצ׳ר זה.
עדכון תוסף עם תלויות
נכון למועד פרסום המאמר, במידה ויהיה עדכון לתוסף אשר ידרוש תלות חדשה שלא דרש בעבר, יהיה ניתן לעדכן, ווורדפרס תדאג להציג לנו התראה בממשק הניהול על התלות החסרה – אני מניח שבהמשך הדרך תהיה מגבלה אשר תגיד שיש להתקין את התוסף החדשה על מנת שיהיה אפשר לעדכן את התוסף שלנו.
כתיבת קוד ״הגנתי״
הגדרת תלויות לתוסף שלנו הוא פיצ׳ר אשר יקל על משתמשי התוסף שלנו, אך עלינו עדיין להגן על הקוד שלנו ע״י שימוש בדפוס ״הגנתי״ של כתיבת הקוד שלנו.
הכוונה בקוד ״הגנתי״ היא בעצם לבדוק האם הפונקציות או המחלקות שאנחנו צורכים מתוספים אחרים אכן קיימים – לדוגמא:
// Check if function exists.
if( function_exists( 'wc_get_order' ) { ... }
// Check if class exists.
if( class_exists( 'WP_Order' ) ) { ... }
סיכום
תלויות תוספים הוא כלי נוסף באוסף כלי הפיתוח שמאפשרים לנו לפתח תוספים לוורדפרס בצורה קלה ומהירה, אך צריך להבין שלרוב קצב אימוץ גרסאות וורדפרס חדשות הוא לא מהיר, ולצערי ישנם הרבה בעלי אתרים אשר לא מתחזקים את האתר שלהם, לכן אני ממליץ עדיין להשאיר את הבדיקה שלנו בקוד האם התוסף קיים ומופעל.
איך אומרים? עדיף מאוחר מאשר אף פעם לא…
הדבר הזה כל-כך מתבקש……
(אני עובד גם עם דרופל, ושם זה דבר בסיסי עוד ממזמן…)
היי בן 👋🏽,
בהחלט דבר מתבקש, אבל עם קהילה כל כך גדולה, וכל כך הרבה דברים שרוצים לקדם, אפשר להבין למה זה מגיע באיחור.
אגב זה היה גם תקופה מסויימת כתוסף נפרד עד שהחליטו להכניס את זה לליבה.