در یک پروژه جدید، به احتمال زیاد استفاده از بیس وردپرس و قالبهای پیشفرض تمامی نیازهای شما را پوشش نمیدهد. برای اضافه کردن ویژگیهای جدید و تغییرات ظاهری موردنیاز، باید از سیستم ماژولار وردپرس کمک بگیریم.
در برنامهنویسی ماژولار، با استفاده ماژولهایی هرکدام بطور جداگانه توسعه داده شده اند، میتوانیم مانند یک پازل قطعات مختلف را کنار هم بچینیم.
برای درک بهتر موضوع، ابتدا از کمی عقبتر نگاه کنیم.
سیستم ماژولار وردپرس
در معماری وردپرس پوسته و قالب مانند ماژول هستند. مهمترین تفاوت این است که فقط امکان استفاده از یک پوسته فعال (و یک child theme) وجود دارد، اما میتوان از تعداد زیادی پلاگین استفاده کرد. تفاوت مهم دیگر درباره ترتیب اجرای دستورات در وردپرس است. باید توجه داشته باشیم که با ارسال هر درخواست به ظاهر یا پیشخان سایت (درخواستهای AJAX متفاوت است)، ترتیب اجرا به صورت زیر خواهد بود:
- هسته وردپرس
- mu-plugins
- plugins
- child theme
- theme
*ممکن است mu-plugins و child theme موجود نباشد.
توسعه فیچرها در پوسته یا افزونه؟
یوز کیس: مواجه شدن با تعداد زیادی پلاگین نصب شده
انتخاب پلاگینها، کار دشواری است. بهعنوان مثال یک انتخاب اشتباه میتواند باعث به خطر افتادن امنیت شود. اگر تعداد زیادی پلاگین وردپرسی روی وبسایت خود نصب کرده باشید (که یکی از رایجترین اشتباهات است)، احتمالا پس از مدتی متوجه کند شدن سرعت لود خواهید شد. همچنین پیشخان شما پر از اعلانها و گزینههای ناخواسته خواهد بود که بسیار آزاردهنده است. بعضی از مدیران سایت تصمیم میگیرند برخی از پلاگینها را به صورت سفارشی توسعه دهند (که میتواند تصمیم بسیار بهجایی باشد). حالا باید تصمیم بگیریم این کدها را کجا قرار دهیم.
توسعه فیچر در پوسته باعث افزایش یکپارچگی و سادگی در نصب خواهد بود. ایده این است که با انتقال یک فایل zip و نصب آن بهعنوان پوسته، بتوانیم تمامی فیچرهای موردنیاز برای سایت را داشته باشیم. اما این ایدهای است که عقیدهدارم در بیشتر موارد نادرست است. برای تصمیمگیری ابتدا موارد زیر را بررسی کنید:
- آیا فیچر مستقل از ظاهر سایت است؟
- آیا استفاده مجدد بهعنوان افزونه در دیگر سایتها اهمیتی دارد؟
- آیا نیاز به امکان فعال و غیرفعال کردن فیچر داریم؟
- آیا توسعه فیچر بسیار آسان و کوتاه است؟
در مواردی مانند افزودن منو و ابزارک، یا افزودن jquery به فرانتاند سایت، بدون شک باید از پوسته کمک بگیریم.
جمع بندی
درصورتی که فیچر مربوط به ظاهر سایت باشد یا توسعه آن تعداد کمی خط کد است که نیاز به غیرفعال شدن درآینده هم نیست، توسعه در قالب انتخاب خوبی است. اما در شرایط دیگر انتخاب درستی به نظر نمیرسد. دلایل من برای این تصمیم به صورت زیر است:
- جدا بودن کدبیس فیچرها: بروزرسانی و دیباگ یک فیچر از طریق پلاگین نسبت به آپدیت کردن کل پوسته آسانتر است. از طرفی امکان توسعه فیچر توسط دولوپر دیگری بدون دخالت در پوسته و دیگر پروژهها وجود دارد. اما درصورت توسعه در پوسته، درک کد برای دیگر افراد میتواند بسیار پیچیده باشد.
- در بعضی موارد مجبور هستیم به دلیل priority اجرای کدها، از افزونه استفاده کنیم و امکان پیادهسازی در قالب وجود ندارد.
- در صورت نیاز، امکان استفاده از فیچر (از طریق پلاگین) در دیگر سایتها وجود دارد.
- در صورت نیاز، امکان غیرفعالسازی فیچر به آسانی وجود دارد.
- امکان استفاده از OOP: در حالتی که پوسته OOP نباشد میتواند مزایای زیادی داشته باشد.