آموزش مفاهیم توسعه وردپرس🌐
1 subscriber
9 links
سلام! 👋 به جمع حرفه‌ای‌های وردپرس خوش آمدید. 🚀

اینجا جایی است که از محدودیت‌های صفحه‌سازها عبور می‌کنیم 🛫 و به عمق کدنویسی حرفه‌ای وردپرس می‌پردازیم. 💻

اگر می‌خواهید از یک کاربر ساده به یک توسعه‌دهنده واقعی وردپرس تبدیل شوید 👨‍💻🎯، همراه ما باشید
Download Telegram
حالا بیایید ببینیم این چهار لایه چطور با هم کار می‌کنند. فرض کنید کاربری وارد سایت شما می‌شود:

1. درخواست کاربر به سرور (میزبانی) می‌رسد.
2. وب سرور، درخواست را به PHP هدایت می‌کند.
3. هسته وردپرس بیدار می‌شود و:
· فایل wp-config.php را می‌خواند و به پایگاه داده متصل می‌شود.
· پلاگین‌های فعال را بارگذاری می‌کند.
· قالب فعال را فراخوانی می‌کند.
4. پلاگین‌ها ممکن است داده‌ها را تغییر دهند یا قابلیت‌هایی اضافه کنند.
5. قالب تصمیم می‌گیرد محتوا چطور نمایش داده شود.
6. صفحه نهایی به مرورگر کاربر فرستاده می‌شود.
خلاصه فصل 📝

در این فصل یاد گرفتیم:

وردپرس یک سیستم مدیریت محتوای متن‌باز است که از سال ۲۰۰۳ تا امروز تکامل یافته است.
ماهیت متن‌باز وردپرس به ما امکان مطالعه، تغییر و مشارکت در توسعه آن را می‌دهد.
اکوسیستم وردپرس شامل جامعه بزرگ، مستندات غنی و دو مخزن اصلی (org و com) است.
معماری وردپرس از چهار لایه تشکیل شده: هسته، پلاگین، قالب و میزبانی.
هر لایه وظیفه مشخصی دارد و تعامل صحیح بین آنها باعث ایجاد یک سایت قدرتمند و پایدار می‌شود.
سه اصل طلایی: هرگز هسته را تغییر نده، عملکرد را در پلاگین‌ها قرار بده، قالب را فقط برای نمایش استفاده کن.

---

تمرین‌های فصل 🏋️‍♂️

برای تثبیت یادگیری، این تمرین‌ها را انجام دهید:

1. مقایسه: به سایت WordPress.org و WordPress.com بروید و حداقل ۵ تفاوت مهم بین این دو پلتفرم را یادداشت کنید.
2. مطالعه: به مستندات رسمی وردپرس (developer.wordpress.org) سر بزنید و با ساختار آن آشنا شوید. سعی کنید Plugin Handbook و Theme Handbook را پیدا کنید.
3. تفکر: به یک وب‌سایت وردپرسی که می‌شناسید فکر کنید. سعی کنید تشخیص دهید کدام بخش‌ها توسط هسته، کدام توسط قالب و کدام توسط پلاگین‌ها ارائه شده است.
4. پژوهش: درباره تاریخچه وردپرس و نسخه‌های مهم آن مطالعه بیشتری کنید. مثلاً بدانید هر نسخه از وردپرس به نام یک نوازنده مشهور جاز نام‌گذاری شده است!

---

در فصل دوم، به ساختار فایل‌ها و پوشه‌های وردپرس خواهیم پرداخت و می‌بینیم هر فایل در کجای این معماری عظیم قرار دارد و چه کاری انجام می‌دهد. با ما همراه باشید! 🗂️
فصل ۲: آشنایی با ساختار فایل‌ها و پوشه‌ها 📁

WordPress File Structure

---
مقدمه فصل

سلام دوباره! 👋 در فصل قبل، با دیدگاه کلی نسبت به وردپرس آشنا شدیم. حالا وقت آن رسیده که آستین‌ها را بالا بزنیم و وارد جزئیات شویم. اگر وردپرس را به یک کارخانه تشبیه کنیم، ساختار فایل‌های آن مثل نقشه‌ی این کارخانه است. برای اینکه بتوانیم در این کارخانه به خوبی کار کنیم، باید بدونیم هر ابزار و قطعه کجا قرار داره. 🏭

در این فصل، قدم به قدم در پوشه‌های وردپرس گردش می‌کنیم، با فایل‌های مهم آشنا می‌شویم و می‌فهمیم هر کدام چه نقشی در اجرای یک وب‌سایت پویا دارند. این دانش پایه‌ای، به شما کمک می‌کند تا در آینده به راحتی مشکلات را عیب‌یابی کنید و کدهای تمیز و استانداردی بنویسید.

پس کمربندها را ببندید، می‌خواهیم وارد ساختار فایل‌های وردپرس بشویم! 🚶‍♂️💻

---
۲-۱. نمای کلی ساختار فایل‌ها 🌳
وقتی برای اولین بار به پوشه اصلی وردپرس نگاه می‌کنید، ممکن است کمی گیج‌کننده به نظر برسد. اما نگران نباشید! این ساختار در طول سال‌ها به بلوغ رسیده و کاملاً منطقی طراحی شده است. بیایید با مهم‌ترین پوشه‌ها و فایل‌های ریشه آشنا شویم:

wordpress/ (ریشه سایت)

├── wp-admin/ ← پوشه بخش مدیریت
├── wp-content/ ← پوشه محتوا (قلب توسعه)
├── wp-includes/ ← پوشه هسته و کتابخانه‌ها

├── wp-config.php ← فایل پیکربندی اصلی
├── .htaccess ← فایل تنظیمات سرور آپاچی
├── index.php ← فایل ورودی اصلی
├── wp-load.php ← بارگذارنده هسته
├── wp-blog-header.php ← هدر کننده وردپرس
├── wp-signup.php ← ثبت‌نام چندسایته
├── wp-activate.php ← فعال‌سازی حساب
├── xmlrpc.php ← سرویس قدیمی XML-RPC
├── wp-cron.php ← زمانبند وظایف
├── wp-links-opml.php ← لینک‌های XML
├── wp-mail.php ← پست از طریق ایمیل
├── wp-settings.php ← تنظیمات اولیه
├── wp-trackback.php ← سرویس قدیمی trackback
├── readme.html ← فایل راهنمای نصب
└── license.txt ← مجوز نرم‌افزار

اما نگران این همه فایل نباشید! به عنوان توسعه‌دهنده، بیشترین تعامل شما با سه پوشه اصلی wp-admin، wp-includes و به خصوص wp-content خواهد بود. بیایید هر کدام را با دقت بررسی کنیم. 🔍

---
۲-۲. ریشه سایت: سه پوشه اصلی 🗂️
۲-۲-۱. پوشه wp-admin (دنیای مدیریت) 👨‍💼

این پوشه محل زندگی فایل‌های بخش مدیریت وردپرس است. هر وقت وارد پیشخوان وردپرس می‌شوید (your-site.com/wp-admin)، درخواست شما به فایل‌های این پوشه هدایت می‌شود.

محتوای اصلی:

· فایل‌های مدیریتی: فایل‌هایی مثل post.php، edit.php، users.php که هر کدام صفحه خاصی را مدیریت می‌کنند.
· فایل‌های جاوااسکریپت و CSS: استایل‌ها و اسکریپت‌های مخصوص بخش ادمین.
· تصاویر و منابع گرافیکی: آیکون‌ها و تصاویر استفاده شده در پیشخوان.
· فایل‌های Ajax: پردازش درخواست‌های Ajax در بخش مدیریت.

⚠️ هشدار مهم: این پوشه متعلق به هسته وردپرس است و هرگز نباید فایل‌های آن را تغییر دهید. اگر نیاز به تغییر ظاهر یا عملکرد بخش مدیریت دارید، از هوک‌های مخصوص (مثل admin_enqueue_scripts یا admin_menu) در پلاگین خود استفاده کنید.

چند فایل مهم در wp-admin:

· admin-ajax.php: قلب پردازش درخواست‌های Ajax در وردپرس (بسیار مهم!)
· admin-footer.php, admin-header.php: بخش‌های سربرگ و پابرگ صفحات مدیریت
· admin-functions.php: توابع کمکی مخصوص ادمین
· admin-post.php: پردازش درخواست‌های POST از بخش مدیریت
۲-۲-۲. پوشه wp-includes (موتورخانه وردپرس) ⚙️

این پوشه را می‌توان موتورخانه وردپرس نامید. تمام توابع، کلاس‌ها و کتابخانه‌های اصلی که هسته وردپرس را می‌سازند، اینجا قرار دارند.

محتوای اصلی:

· توابع هسته: فایل‌هایی مثل functions.php، post.php، user.php و...
· کلاس‌های اصلی: کلاس‌هایی مثل WP_Query، WP_User، wpdb و...
· کتابخانه‌های شخص ثالث: کتابخانه‌های معروفی که وردپرس از آنها استفاده می‌کند.
· فایل‌های بین‌المللی‌سازی: پوشه‌های زبان و ترجمه.

نگاهی به داخل wp-includes:

فایل/پوشه کاربرد
wp-db.php کلاس مدیریت پایگاه داده ($wpdb)
class-wp-query.php کلاس اصلی کوئری‌گیری از پست‌ها
post.php, post-template.php توابع مربوط به پست‌ها
comment.php, comment-template.php توابع مربوط به نظرات
user.php, author-template.php توابع مربوط به کاربران
rest-api/ پوشه مخصوص REST API
block-patterns/ الگوهای بلوکی پیش‌فرض
SimplePie/ کتابخانه فیدخوان
Text/ کتابخانه‌های پردازش متن

🔬 نکته تحقیقاتی: به عنوان یک توسعه‌دهنده حرفه‌ای، گاهی اوقات لازم است به این پوشه سر بزنید و نحوه کار توابع هسته را مطالعه کنید. این کار درک عمیق‌تری از وردپرس به شما می‌دهد.
۲-۲-۳. پوشه wp-content (قلب توسعه) 💖

و بالاخره می‌رسیم به مهم‌ترین پوشه برای ما توسعه‌دهندگان! اینجا جایی است که خلاقیت شما جریان پیدا می‌کند. تمام کارهایی که به عنوان توسعه‌دهنده انجام می‌دهید (قالب‌سازی، پلاگین‌نویسی، آپلود فایل‌ها) در این پوشه اتفاق می‌افتد.

ساختار اولیه wp-content:

wp-content/

├── themes/ ← پوشه قالب‌ها
│ ├── twentytwentythree/
│ ├── twentytwentytwo/
│ └── your-theme/

├── plugins/ ← پوشه پلاگین‌ها
│ ├── akismet/
│ ├── hello-dolly/
│ └── your-plugin/

├── uploads/ ← پوشه فایل‌های آپلودی (ایجاد می‌شود)
│ ├── 2023/
│ ├── 2024/
│ └── 2025/

├── mu-plugins/ ← پلاگین‌های اجباری (Must-Use Plugins)

├── languages/ ← فایل‌های ترجمه

└── upgrade/ ← فایل‌های موقت به‌روزرسانی

در بخش بعدی، هر کدام از این پوشه‌ها را به تفصیل بررسی خواهیم کرد. بیایید عمیق‌تر برویم... 🏊‍♂️

---
۲-۳. پوشه wp-content: قلب توسعه ❤️
۲-۳-۱. پوشه themes (دنیای قالب‌ها) 🎨

پوشه themes محل زندگی تمام قالب‌های نصب شده روی سایت شماست. هر قالب یک پوشه مجزا دارد که شامل فایل‌های قالب، استایل‌ها، جاوااسکریپت و منابع تصویری است.

ساختار یک قالب معمولی:

your-theme/

├── style.css ← فایل استایل اصلی و اطلاعات قالب (الزامی)
├── index.php ← فایل اصلی قالب (الزامی)
├── functions.php ← توابع قالب (اختیاری ولی بسیار مهم)
├── header.php ← بخش سربرگ
├── footer.php ← بخش پابرگ
├── sidebar.php ← نوار کناری
├── single.php ← نمایش یک نوشته
├── page.php ← نمایش یک برگه
├── archive.php ← صفحه آرشیو
├── category.php ← صفحه دسته‌بندی
├── tag.php ← صفحه برچسب
├── 404.php ← صفحه خطا
├── search.php ← صفحه جستجو
├── screenshot.png ← تصویر پیش‌نمایش قالب

├── assets/ ← پوشه منابع (دلخواه)
│ ├── css/
│ ├── js/
│ └── images/

├── template-parts/ ← تکه‌های قالب (دلخواه)
│ ├── content.php
│ ├── content-single.php
│ └── content-page.php

└── inc/ ← فایل‌های شامل شونده (دلخواه)
├── customizer.php
└── widgets.php

🎯 نکته مهم: حداقل فایل‌های مورد نیاز برای یک قالب معتبر، فقط style.css و index.php است. اما برای یک قالب حرفه‌ای، به فایل‌های بیشتری نیاز دارید.

فایل style.css: این فایل علاوه بر استایل‌ها، شامل هدر مخصوص قالب است که اطلاعاتی مانند نام قالب، نویسنده، نسخه و توضیحات را به وردپرس می‌دهد:

/*
Theme Name: نام قالب شما
Theme URI: https://example.com
Author: نام نویسنده
Author URI: https://example.com
Description: توضیحات کوتاه درباره قالب
Version: 1.0.0
License: GPL v2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html
Text Domain: متن-دامین
Tags: برچسب،های،قالب
*/
۲-۳-۲. پوشه plugins (دنیای پلاگین‌ها) 🔌

پوشه plugins محل نصب همه پلاگین‌های سایت است. هر پلاگین معمولاً در یک پوشه مجزا قرار دارد، اگرچه پلاگین‌های تک‌فایلی هم وجود دارند.

ساختار یک پلاگین معمولی:

your-plugin/

├── your-plugin.php ← فایل اصلی پلاگین (الزامی)
├── uninstall.php ← فایل پاک‌سازی (اختیاری ولی توصیه شده)

├── includes/ ← کلاس‌ها و توابع اصلی
│ ├── class-admin.php
│ └── class-frontend.php

├── public/ ← فایل‌های بخش عمومی
│ ├── css/
│ └── js/

├── admin/ ← فایل‌های بخش مدیریت
│ ├── css/
│ ├── js/
│ └── views/

└── languages/ ← فایل‌های ترجمه
└── your-plugin-fa_IR.po

فایل اصلی پلاگین: مشابه قالب‌ها، فایل اصلی پلاگین هم یک هدر مخصوص دارد:

<?php
/**
* Plugin Name: نام پلاگین شما
* Plugin URI: https://example.com
* Description: توضیحات کوتاه درباره پلاگین
* Version: 1.0.0
* Author: نام نویسنده
* Author URI: https://example.com
* License: GPL v2 or later
* License URI: https://www.gnu.org/licenses/gpl-2.0.html
* Text Domain: متن-دامین
* Domain Path: /languages
*/
۲-۳-۳. پوشه uploads (انبار محتوا) 📦

پوشه uploads به صورت خودکار توسط وردپرس ایجاد می‌شود و محل ذخیره‌سازی تمام فایل‌های آپلودی است:

· تصاویر آپلودی
· فایل‌های PDF و مستندات
· فایل‌های صوتی و تصویری
· هر فایل دیگری که کاربران آپلود می‌کنند

ساختار پوشه uploads:

uploads/

├── 2023/ ← سال آپلود
│ ├── 01/ ← ماه آپلود
│ │ ├── image1.jpg
│ │ ├── image1-150x150.jpg ← اندازه‌های مختلف
│ │ ├── image1-300x200.jpg
│ │ └── image1-768x512.jpg
│ └── 02/

└── 2024/
└── 01/

💡 نکته جالب: وردپرس به صورت خودکار برای هر تصویر آپلودی، چندین نسخه با اندازه‌های مختلف ایجاد می‌کند. این کار باعث بهینه‌سازی سرعت بارگذاری در قسمت‌های مختلف سایت می‌شود.
۲-۳-۴. پوشه mu-plugins (پلاگین‌های اجباری)

این پوشه کمی خاص است. MU مخفف Must-Use (اجباری) است. پلاگین‌هایی که اینجا قرار می‌گیرند:

· همیشه فعال هستند و نمی‌توان آنها را غیرفعال کرد
· بدون نیاز به فعال‌سازی، از همان ابتدا کار می‌کنند
· در لیست پلاگین‌های معمولی نمایش داده نمی‌شوند
· مناسب برای عملکردهای ضروری سایت که نباید غیرفعال شوند

نحوه کار: وردپرس تمام فایل‌های PHP در این پوشه را به صورت خودکار بارگذاری می‌کند.

🏢 کاربرد واقعی: در پروژه‌های بزرگ، از mu-plugins برای عملکردهای سطح بالا مثل ثبت انواع محتوای سفارشی اصلی یا اتصال به سرویس‌های خارجی استفاده می‌کنند.
۲-۳-۵. پوشه languages (زبان‌ها) 🌐

این پوشه محل ذخیره فایل‌های ترجمه وردپرس، قالب‌ها و پلاگین‌هاست. فایل‌های ترجمه با پسوندهای .mo و .po در اینجا قرار می‌گیرند.

---
۲-۴. فایل‌های پیکربندی حیاتی 🔧
۲-۴-۱. فایل wp-config.php (فرمانده کل) 👑

این فایل مهم‌ترین فایل پیکربندی وردپرس است. بدون آن، وردپرس نمی‌داند چطور به پایگاه داده متصل شود و چه تنظیماتی دارد. این فایل در ریشه سایت قرار می‌گیرد.

مهم‌ترین بخش‌های wp-config.php:

<?php
// ** تنظیمات پایگاه داده ** //
define('DB_NAME', 'database_name'); // نام پایگاه داده
define('DB_USER', 'username'); // نام کاربری پایگاه داده
define('DB_PASSWORD', 'password'); // رمز عبور
define('DB_HOST', 'localhost'); // هاست پایگاه داده
define('DB_CHARSET', 'utf8'); // مجموعه کاراکتر
define('DB_COLLATE', ''); // نحوه مرتب‌سازی

// ** کلیدهای امنیتی ** //
define('AUTH_KEY', 'put your unique phrase here');
define('SECURE_AUTH_KEY', 'put your unique phrase here');
define('LOGGED_IN_KEY', 'put your unique phrase here');
define('NONCE_KEY', 'put your unique phrase here');
define('AUTH_SALT', 'put your unique phrase here');
define('SECURE_AUTH_SALT', 'put your unique phrase here');
define('LOGGED_IN_SALT', 'put your unique phrase here');
define('NONCE_SALT', 'put your unique phrase here');

// ** پیشوند جداول ** //
$table_prefix = 'wp_'; // پیشوند جداول پایگاه داده

// ** حالت اشکال‌زدایی ** //
define('WP_DEBUG', false); // فعال‌سازی حالت دیباگ

// ** محدودیت حافظه ** //
define('WP_MEMORY_LIMIT', '64M'); // حافظه مجاز PHP

// ** تنظیمات اضافی ** //
define('WP_POST_REVISIONS', 5); // تعداد بازبینی‌های ذخیره شده
define('AUTOSAVE_INTERVAL', 160); // فاصله ذخیره خودکار (ثانیه)
define('WP_CONTENT_DIR', $_SERVER['DOCUMENT_ROOT'] . '/wp-content');
define('WP_CONTENT_URL', 'http://example.com/wp-content');

/* پایان تنظیمات، خوش باشید! */
require_once(ABSPATH . 'wp-settings.php');

تنظیمات پیشرفته در wp-config.php:

// ** انتقال سایت به دامنه جدید ** //
define('WP_HOME', 'http://example.com');
define('WP_SITEURL', 'http://example.com');

// ** غیرفعال کردن ویرایش فایل‌ها از پیشخوان ** //
define('DISALLOW_FILE_EDIT', true);

// ** فعال‌سازی حالت نگهداری ** //
define('WP_MAINTENANCE_MODE', true);

// ** افزایش حافظه برای بخش مدیریت ** //
define('WP_MAX_MEMORY_LIMIT', '256M');

// ** غیرفعال کردن cron و استفاده از cron سیستمی ** //
define('DISABLE_WP_CRON', true);

// ** فعال‌سازی لاگ خطاها ** //
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);
@ini_set('display_errors', 0);

🔐 نکته امنیتی: کلیدهای امنیتی را حتماً از ابزار آنلاین WordPress Salt Generator دریافت کنید. این کلیدها به رمزنگاری کوکی‌ها و توکن‌های امنیتی کمک می‌کنند.
۲-۴-۲. فایل .htaccess (دروازه‌بان سرور) 🚪

این فایل (با نقطه در ابتدا) مخصوص وب‌سرور آپاچی است و تنظیمات سطح سرور را کنترل می‌کند. وردپرس به طور خودکار محتوای این فایل را مدیریت می‌کند.

محتوای معمولی .htaccess وردپرس:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

این قوانین چه می‌کنند؟

· اگر فایل درخواستی واقعاً وجود دارد، همان را نشان بده
· اگر پوشه درخواستی واقعاً وجود دارد، همان را نشان بده
· در غیر این صورت، درخواست را به index.php هدایت کن (تا وردپرس تصمیم بگیرد)

تنظیمات امنیتی اضافی در .htaccess:

# BEGIN Security
# محافظت از فایل wp-config.php
<Files wp-config.php>
order allow,deny
deny from all
</Files>

# محافظت از فایل .htaccess
<Files .htaccess>
order allow,deny
deny from all
</Files>

# غیرفعال کردن دسترسی به پوشه‌ها
Options -Indexes

# محدود کردن دسترسی به XML-RPC (در صورت عدم نیاز)
<Files xmlrpc.php>
order allow,deny
deny from all
</Files>
# END Security

⚠️ نکته مهم: اگر از سرور Nginx استفاده می‌کنید، فایل .htaccess کاربردی ندارد. تنظیمات معادل باید در فایل کانفیگ Nginx اعمال شوند.

---
۲-۵. سایر فایل‌های مهم ریشه 📄
index.php (نقطه ورود) 🚪

ساده‌ترین فایل وردپرس! فقط یک خط کد دارد که کل وردپرس را بارگذاری می‌کند:

<?php
// بارگذاری محیط وردپرس
require( dirname( __FILE__ ) . '/wp-blog-header.php' );

wp-load.php (بارگذارنده) 🔄

این فایل مسیر فایل wp-config.php را پیدا کرده و محیط وردپرس را بارگذاری می‌کند.

wp-blog-header.php (هدایت‌کننده) 🧭

محیط وردپرس را بارگذاری کرده و قالب مناسب را فراخوانی می‌کند.

xmlrpc.php (سرویس قدیمی) 📡

این فایل سرویس XML-RPC را ارائه می‌دهد که برای اتصال اپلیکیشن‌های قدیمی به وردپرس استفاده می‌شود. امروزه کمتر استفاده می‌شود و برای امنیت بهتر می‌توان آن را غیرفعال کرد.

wp-cron.php (زمانبند)

وظایف زمانبندی شده وردپرس را اجرا می‌کند. هر بار که کاربری از سایت بازدید می‌کند، این فایل چک می‌کند آیا وظیفه‌ای برای اجرا وجود دارد یا نه.

---