برای شروع برنامهنویسی وردپرس، ابتدا PHP پایه و ساختار درخواست یک صفحه را یاد بگیرید، سپس در محیط محلی یک افزونه کوچک بسازید و با اکشنها و فیلترها رفتار سایت را تغییر دهید. بعد از این مرحله میتوانید بر اساس هدفتان سراغ توسعه قالب، افزونه یا بلوک بروید. ویرایش فایلهای هسته وردپرس نقطه شروع مناسبی نیست؛ تغییرات باید در بخش قابل نگهداری پروژه قرار بگیرند.
این راهنما برای کسی است که مدیریت معمول سایت را میداند و میخواهد وارد کدنویسی وردپرس شود. خروجی تمرین، افزونهای محلی است که در پایان نوشتههای وبلاگ یک پیام نمایش میدهد. نصب و تنظیم اولیه سایت را در آموزش ساخت سایت با وردپرس بخوانید؛ اینجا روی مسیر توسعه تمرکز میکنیم.
زبان برنامهنویسی وردپرس چیست و چه پیشنیازهایی لازم است؟
بخش مهمی از منطق سمت سرور وردپرس با PHP اجرا میشود. HTML ساختار خروجی را میسازد، CSS ظاهر را کنترل میکند و JavaScript برای تعاملات مرورگر و توسعه ویرایشگر اهمیت دارد. پایگاه داده هم بخشی از معماری است، اما برای اولین افزونه لازم نیست از نو یک لایه اتصال به دیتابیس بنویسید.
برای شروع، در PHP روی متغیر، شرط، آرایه، حلقه، تابع، محدوده متغیر و مفهوم callback مسلط شوید. باید بتوانید یک آرایه را تغییر دهید و نتیجه را از تابع برگردانید. در HTML و CSS نیز ساختار معنایی صفحه و انتخابگرها را بشناسید. اگر هنوز این پایهها را تمرین نکردهاید، نقشه راه یادگیری طراحی سایت ترتیب مناسب تمرینها را روشن میکند.
استفاده از قالب و صفحهساز با توسعه وردپرس همپوشانی دارد، ولی مهارتهای یکسانی نمیخواهد. توسعهدهنده باید بتواند محل اجرای کد، اثر تغییر، نحوه آزمون و راه برگشت را توضیح دهد. برای انتخاب روش اجرای یک پروژه تجاری، مقایسه وردپرس و سایت اختصاصی را جدا از مسیر یادگیری بررسی کنید.
محیط محلی را پیش از نوشتن کد آماده کنید
یک نصب آزمایشی وردپرس روی رایانه با PHP، وبسرور و پایگاه داده سازگار آماده کنید. چند نوشته آزمایشی بسازید و یک قالب ساده فعال نگه دارید. داده مشتری، رمز سرویسهای واقعی و اتصال پرداخت زنده را وارد محیط تمرین نکنید. مشخصات نسخههای نصبشده را در یادداشت پروژه بنویسید تا نتیجه تمرین قابل تکرار باشد.
- یک ویرایشگر کد با پشتیبانی PHP و یک مخزن Git برای فایلهای کد آماده کنید؛ فایل رمز و خروجی پشتیبان را وارد مخزن نکنید.
- یک نسخه سالم اولیه نگه دارید. برای انتقال یا ساخت نسخه آزمایشی از سایت موجود، راهنمای پشتیبانگیری و انتقال سایت وردپرس با داپلیکیتور میتواند نقطه شروع باشد؛ نسخه کپیشده را پیش از کار از سرویسهای واقعی جدا کنید.
- ثبت خطا را در محیط توسعه فعال کنید و خطاها را از گزارش بخوانید. نمایش عمومی جزئیات خطا در سایت اصلی میتواند اطلاعات داخلی را آشکار کند.
- قبل از هر تغییر یک مرحله قابل بازگشت ثبت کنید. اگر خطای بحرانی رخ داد، از مسیر فایلها افزونه تمرینی را غیرفعال کنید و خطا را بررسی کنید.
تنظیمات WP_DEBUG، WP_DEBUG_LOG و WP_DEBUG_DISPLAY نقشهای متفاوتی دارند. آنها را بدون توجه به محیط کپی نکنید؛ راهنمای رسمی اشکالزدایی وردپرس روش ثبت و نمایش خطا را توضیح میدهد. اگر ثابت از قبل تعریف شده، همان مقدار را ویرایش کنید تا تعریف تکراری نسازید.
کد را در قالب بنویسیم یا افزونه؟
| نیاز | محل مناسب برای بررسی | دلیل |
|---|---|---|
| تغییر چیدمان و ظاهر صفحات | قالب یا قالب فرزند | رفتار به نمایش سایت وابسته است. |
| قابلیتی که با تعویض قالب باید بماند | افزونه اختصاصی کوچک | منطق از ظاهر جدا میماند. |
| تغییر قابلیت یک افزونه موجود | هوک مستند آن در کد اختصاصی | ویرایش مستقیم فایل افزونه با بهروزرسانی از بین میرود. |
| تغییر هسته وردپرس | ابتدا API و هوک رسمی را پیدا کنید | ویرایش هسته نگهداری و بهروزرسانی را دشوار میکند. |
فایل functions.php قالب محل اجرای بعضی تغییرات است، اما با عوض شدن قالب، کد آن هم دیگر از همان مسیر اجرا نمیشود. برای اصلاح فایلهای یک قالب موجود، مفهوم قالب فرزند و روش بارگذاری فایلها را در مستندات قالب فرزند بخوانید. فایلهای قالب والد را مستقیم تغییر ندهید.
در مسیر توسعه قالب، تفاوت قالب کلاسیک با قالب بلوکی را نیز بشناسید. قالب بلوکی از بلوکها برای بخشهای مختلف سایت استفاده میکند؛ آموزش قدیمی مبتنی بر فایلهای PHP را بدون بررسی نوع قالب روی آن اجرا نکنید. راهنمای رسمی توسعه قالب نقطه شروع هر دو مسیر است.
هوک چیست؟ تفاوت اکشن و فیلتر با مثال
هوک محل از پیش تعیینشدهای برای اتصال کد شما به جریان اجرای وردپرس است. یک تابع مینویسید و آن را به هوک مناسب متصل میکنید. در اکشن، تابع کاری را در یک مرحله انجام میدهد؛ در فیلتر، داده را دریافت و پس از تغییر برمیگرداند. این تفاوت در راهنمای رسمی هوکهای وردپرس توضیح داده شده است.
برای نمونه، ثبت یک قابلیت در زمان راهاندازی میتواند به اکشن نیاز داشته باشد؛ افزودن یک جمله به متن نوشته میتواند با فیلتر انجام شود. در callback فیلتر، فراموش کردن return ممکن است خروجی را خالی کند. استفاده از echo به جای برگرداندن مقدار هم جریان خروجی را بههم میزند.
نام هوک، زمان اجرا، آرگومانها و اولویت آن را از مستندات همان هوک بخوانید. قرار دادن اولویت بزرگتر بهتنهایی مشکل انتخاب هوک اشتباه را حل نمیکند. هر تابع نیز باید نام منحصربهفرد یا فضای نام مشخص داشته باشد تا با کد دیگر تداخل نکند.
تمرین اول: ساخت افزونهای برای پیام پایان نوشته
این نمونه فقط برای محیط محلی است و دادهای ذخیره نمیکند. در مسیر wp-content/plugins پوشه anil-learning-note و درون آن فایل anil-learning-note.php بسازید. کل کد زیر محتوای همان فایل است؛ آن را داخل متن نوشته یا ویجت HTML قرار ندهید. سربرگ افزونه به وردپرس کمک میکند فایل را بهعنوان افزونه شناسایی کند؛ حداقل فیلد لازم در مستندات سربرگ افزونه مشخص شده است.
<?php
/**
* Plugin Name: Anil Learning Note
* Description: Local learning exercise for the content filter.
* Version: 1.0.0
*/
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
function anil035_append_learning_note( $content ) {
if ( ! is_singular( 'post' ) || ! in_the_loop() || ! is_main_query() ) {
return $content;
}
$message = 'این نوشته بخشی از تمرین محلی توسعه وردپرس است.';
return $content . '<p class="anil-learning-note">' . esc_html( $message ) . '</p>';
}
add_filter( 'the_content', 'anil035_append_learning_note' );
افزونه را فقط در نصب محلی فعال کنید و یک نوشته را در صفحه تکی آن ببینید. پیام باید پس از متن ظاهر شود. سپس صفحه اصلی، یک برگه و بایگانی را بررسی کنید؛ پیام نباید به متن آنها اضافه شود. با غیرفعال کردن افزونه، پیام باید حذف شود و متن ذخیرهشده نوشته دستنخورده بماند.
شرط is_singular( 'post' ) دامنه تغییر را به نوشته تکی محدود میکند. دو شرط بعدی، حلقه اصلی و کوئری اصلی را هدف میگیرند. esc_html متن پیام را برای محل نمایش متنی آماده میکند. این شرطها را برای سناریوی خود آزمون کنید؛ صفحهساز، فید یا افزونههای دیگر ممکن است مسیر نمایش متفاوتی داشته باشند.
اگر پیام نمایش داده نشد چه چیزی را بررسی کنیم؟
ابتدا مسیر فایل و فعال بودن افزونه را کنترل کنید. سپس گزارش خطای PHP، نام callback و بسته شدن پرانتزها را ببینید. مطمئن شوید صفحه واقعاً نوشته تکی است و قالب محتوای اصلی را از مسیر معمول نمایش میدهد. در پایان کش محلی را پاک کنید. برای پیدا کردن علت، شرطها را یکییکی در محیط آزمایشی بررسی کنید؛ حذف همزمان همه شرطها نتیجه قابل اتکایی نمیدهد.
امنیت کد را از همان تمرین اول یاد بگیرید
در نمونه بالا ورودی کاربر نداریم. وقتی فرم، تنظیمات یا درخواست AJAX اضافه میکنید، مسئولیت شما بیشتر میشود. اعتبارسنجی یعنی بررسی مجاز بودن مقدار؛ پاکسازی یعنی آماده کردن ورودی مناسب؛ escape یعنی آماده کردن خروجی برای محل نمایش. هیچکدام جای دیگری را نمیگیرد.
- برای عملیات مدیریتی، مجوز کاربر را بررسی کنید؛ وارد بودن به حساب بهتنهایی کافی نیست.
- برای درخواست تغییر وضعیت از nonce متناسب استفاده کنید. nonce جای کنترل سطح دسترسی را نمیگیرد.
- در خروجی، تابع متناسب با متن، صفت HTML یا URL را انتخاب کنید؛ escape را نزدیک محل نمایش انجام دهید.
- داده خام درخواست را مستقیم وارد SQL نکنید. ابتدا API آماده وردپرس را بررسی کنید؛ در SQL اختصاصی از روش آمادهسازی درست استفاده کنید.
- رمز، داده شخصی و اطلاعات حساس را در گزارش عمومی خطا ثبت نکنید.
راهنمای امنیت توسعه وردپرس این مسئولیتها را بهعنوان بخشی از طراحی قابلیت مطرح میکند. نصب افزونه امنیتی جای بازبینی کد اختصاصی را نمیگیرد.
بعد از اولین افزونه چه مسیری را ادامه دهیم؟
اگر هدفتان ظاهر سایت است، سلسلهمراتب قالب، بارگذاری اصولی فایلهای CSS و JavaScript و سپس ساختار قالب بلوکی را تمرین کنید. اگر هدفتان افزودن قابلیت است، با API تنظیمات، نوع نوشته سفارشی، متادیتا و کنترل دسترسی ادامه دهید. برای توسعه بلوک و ویرایشگر نیز JavaScript را عمیقتر بخوانید. لازم نیست همه مسیرها را همزمان شروع کنید.
برای دیدن کاربرد واقعی اکشن و فیلتر در یک سناریوی مدیریتی، آموزش افزودن ستون محصولات به فهرست سفارشهای ووکامرس را بررسی کنید. آن تمرین وابستگیها و حالتهای مختلف سفارش دارد؛ قبل از اجرای کد، مستندات نسخه نصبشده ووکامرس را بخوانید و نتیجه را روی داده آزمایشی بسنجید.
معیار عبور از مرحله مقدماتی
یک تمرین را وقتی تمامشده بدانید که بتوانید دلیل انتخاب هوک، ورودی و خروجی تابع، دامنه اثر و روش غیرفعال کردن تغییر را توضیح دهید. کد باید پس از غیرفعالسازی رفتار قابل پیشبینی داشته باشد، خطای تازه نسازد و با یک قالب ساده دیگر نیز در محدوده مسئولیت خود کار کند.
پیش از انتقال به سایت اصلی، تغییر را در محیط آزمایشی نزدیک به سایت مقصد بررسی کنید، پشتیبان قابل بازیابی داشته باشید و فایلها و وابستگیها را مستند کنید. در تحویل پروژه، مسئول نگهداری و مسیر بازگشت را مشخص کنید؛ چکلیست تحویل سایت وردپرسی به کارفرما برای این مرحله مفید است. اگر هدف شما سفارش یک سایت قابل توسعه است، نیازهای فعلی و تغییرات مورد انتظار را هنگام بررسی خدمات طراحی سایت با وردپرس روشن بیان کنید.
پرسشهای رایج درباره آموزش کدنویسی وردپرس
آیا برای ساخت سایت حتماً باید برنامهنویسی بلد باشم؟
برای مدیریت محتوا و ساخت بسیاری از صفحات با ابزارهای آماده، الزام به کدنویسی ندارید. زمانی که رفتار اختصاصی میخواهید یا باید خطا و تداخل کد را رفع کنید، دانش توسعه اهمیت بیشتری پیدا میکند.
یادگیری PHP کافی است؟
PHP پایه مهمی است، ولی باید معماری وردپرس، هوکها، APIها و اصول امنیت را هم بشناسید. برای بخش نمایشی به HTML و CSS و برای تعاملات و توسعه ویرایشگر به JavaScript نیاز پیدا میکنید.
اول قالب بسازیم یا افزونه؟
یک افزونه محلی کوچک برای شناخت چرخه اجرا و فیلترها تمرین مناسبی است. سپس بر اساس هدف ادامه دهید: ظاهر و چیدمان به مسیر قالب نزدیکترند و قابلیت مستقل به مسیر افزونه. تمرین پیام پایان نوشته، شروع همین مسیر است.