قلب وردپرس | آموزش جامع
1.9K subscribers
441 photos
77 videos
190 files
402 links
مرجع تخصصی آموزش وردپرس
گروه تخصصی : @woordpressi
اینستاگرام : codin.uni

ارتباط :
t.me/wpheart?direct
Download Telegram
🚫 دیگه از شر پیام «تأیید ایمیل مدیر سایت» توی وردپرس خلاص شو!

🖌 اگر هر بار وارد پیشخوان میشی و با پیام تأیید ایمیل مدیر روبه‌رو میشی، فقط کد زیر رو داخل فایل functions.php قالب یا افزونه اختصاصیت قرار بده:

add_filter( 'admin_email_check_interval', '__return_false' );

یا

add_filter( 'admin_email_check_interval', function() {
return 0;
} );


از این به بعد وردپرس دیگه هیچ‌وقت ازت نمی‌خواد ایمیل مدیر رو تأیید کنی.

💙 اگر این آموزش برات مفید بود:
❤️ پست رو لایک کن.
📌 ذخیره‌ش کن که بعداً دنبالش نگردی.
📤 برای دوست برنامه‌نویس یا وردپرسی‌ات بفرست.

و حتماً قلب وردپرس رو دنبال کن؛ هر روز ترفندها، آموزش‌های حرفه‌ای، افزونه‌نویسی و کدهای کاربردی منتشر می‌کنیم که ساعت‌ها از وقتت رو ذخیره می‌کنن.


#وردپرس #WordPress #PHP #افزونه_نویسی #برنامه_نویسی #توسعه_وردپرس #قلب_وردپرس

@wpheart
1
🚨 این ثابت (Constant) وردپرس می‌تونه مصرف رم سایتت رو نصف کنه!

فکر می‌کنی هر بار که وردپرس اجرا میشه، تمام فایل‌های افزونه‌ها و قالب فقط یک بار Load میشن؟
اشتباهه...
وردپرس برای پیدا کردن مسیر فایل‌ها، بارها از توابعی مثل:
plugin_dir_path()
plugin_dir_url()
get_template_directory()
get_stylesheet_directory()

استفاده می‌کنه.
اما یه راه حرفه‌ای‌تر وجود داره...
━━━━━━━━━━━━━━
راهکار
به جای اینکه داخل حلقه یا توابع پرتکرار، هر بار این توابع رو صدا بزنی، یک بار مسیر رو داخل Constant ذخیره کن.
مثال:
define( 'WPHEART_PATH', plugin_dir_path( __FILE__ ) );
define( 'WPHEART_URL', plugin_dir_url( __FILE__ ) );

بعد همه جا فقط از:

WPHEART_PATH
WPHEART_URL

استفاده کن.
━━━━━━━━━━━━━━

🔥 چرا بهتره؟
فراخوانی کمتر توابع
خوانایی بیشتر کد
نگهداری آسان‌تر پروژه
بهینه‌تر برای افزونه‌های بزرگ
━━━━━━━━━━━━━━

⚠️ نکته
این تغییر به تنهایی قرار نیست سایتت رو از ۵ ثانیه به ۱ ثانیه برسونه؛ اما در افزونه‌ها و پروژه‌های بزرگ، وقتی کنار ده‌ها بهینه‌سازی دیگه استفاده بشه، باعث کد تمیزتر و کاهش سربار غیرضروری میشه.
همین تفاوت‌های کوچیکه که کد یه برنامه‌نویس حرفه‌ای رو از بقیه جدا می‌کنه. 😉❤️


@wpheart
2
❗️از اون پست هایی که منبعش ماییم 😜

🚨 افزونه‌ای که هیچ‌کس نمی‌تونه از پنل وردپرس غیرفعالش کنه!

🖌 فکر می‌کنی همه افزونه‌های وردپرس از مسیر:
wp-content/plugins
اجرا میشن؟

نه! اشتباه فکر کردی.

وردپرس یک نوع افزونه ویژه داره به اسم:

Must-Use Plugin (MU Plugin)

که در مسیر:
wp-content/mu-plugins

قرار می‌گیره.
━━━━━━━━━━━━━━

🤔 چرا اسمش Must-Use هست؟

چون...
به محض قرار گرفتن داخل پوشه mu-plugins، به‌صورت خودکار فعال میشه.
و مهم‌تر اینکه...

دکمه Deactivate نداره!

یعنی مدیر سایت از پنل وردپرس نمی‌تونه غیرفعالش کنه.
━━━━━━━━━━━━━━

🔥 MU Plugin چه کاربردی داره؟

✔️ کدهای امنیتی
✔️ محدود کردن کاربران
✔️ اتصال به سرویس‌های سازمانی
✔️ لاگ‌گیری
✔️ تغییرات سراسری روی همه سایت‌ها
✔️ کدهایی که نباید هیچ‌وقت غیرفعال بشن
━━━━━━━━━━━━━━

🚀 چرا شرکت‌های بزرگ از MU Plugin استفاده می‌کنن؟

اگر یک کاربر تمام افزونه‌های سایت رو غیرفعال کنه
باز هم MU Plugin اجرا میشه!
به همین دلیل، برای قابلیت‌های حیاتی انتخاب بسیار مناسبیه.
━━━━━━━━━━━━━━
⚠️ اما یه نکته مهم :

برخلاف افزونه‌های معمولی:

فایل اصلی MU Plugin باید مستقیماً داخل پوشه mu-plugins قرار بگیره.

اگر افزونه‌ چند فایل داره، معمولاً یک فایل Loader داخل mu-plugins قرار می‌دن که فایل‌های اصلی رو از پوشه دیگری require می‌کنه.

━━━━━━━━━━━━━━


💎 قانون Seniorها
همه چیز رو افزونه معمولی ننویس...
بعضی قابلیت‌ها باید همیشه فعال باشن، حتی اگر همه افزونه‌های سایت غیرفعال بشن.
━━━━━━━━━━━━━━


🔰 اینجا یه قدم از خیلی از برنامه‌نویس‌های وردپرس جلوتری. 😉


@wpheart
👎4🔥1
🚨 این Hook مخفی قبل از ذخیره شدن هر Option اجرا میشه!

فکر می‌کنی فقط بعد از ذخیره تنظیمات میشه کاری انجام داد؟
نه...
وردپرس قبل از اینکه هر Option داخل دیتابیس ذخیره بشه، یک Hook فوق‌العاده قدرتمند اجرا می‌کنه.

pre_update_option_{$option}

🤔 این Hook چه کاری انجام میده؟
قبل از ذخیره شدن مقدار جدید، می‌تونی:
مقدار رو تغییر بدی
اعتبارسنجی کنی
جلوی ذخیره شدنش رو بگیری
داده‌ها رو رمزنگاری کنی
مقدار قبلی و جدید رو با هم مقایسه کنی
🔥 مثال واقعی :

فرض کن نمی‌خوای عنوان سایت تغییر کنه.

add_filter('pre_update_option_site_name',
function( $new, $old ) {
return $old;
},
10,
2
);


نتیجه؟

هرچقدر هم کاربر ایمیل جدید وارد کنه...
هیچ‌وقت داخل دیتابیس ذخیره نمیشه!
🚀 کاربردهای حرفه‌ای :

✔️ جلوگیری از تغییر تنظیمات حساس
✔️ ثبت Log قبل از تغییر
✔️ اعتبارسنجی تنظیمات
✔️ جلوگیری از ورود داده اشتباه
✔️ همگام‌سازی با APIهای خارجی
✔️ رمزنگاری اطلاعات قبل از ذخیره

⚠️ چیزی که کمتر کسی می‌دونه...
اکثر برنامه‌نویس‌ها بعد از ذخیره شدن اطلاعات سراغ update_option() میرن...
در حالی که حرفه‌ای‌ها قبل از ذخیره شدن داده رو کنترل می‌کنن.

💎 قانون Seniorها
همیشه بهترین زمان برای کنترل داده...
قبل از ورود به دیتابیسه، نه بعد از اون.

😏 شرط می‌بندم کمتر از ۵٪ برنامه‌نویس‌های وردپرس از این Hook استفاده کردن.

@wpheart
1
🚨 هنوز جدول افزونه‌ات رو با CREATE TABLE می‌سازی؟

اگر افزونه‌نویسی می‌کنی، این اشتباه می‌تونه موقع آپدیت افزونه، کاربرات رو به دردسر بندازه!

🤔 بیاید واقعی ببینیم

فرض کن نسخه 1.0 افزونه‌ات رو منتشر کردی و این جدول رو ساختی:

global $wpdb;
$table = $wpdb->prefix . 'customers';
$sql = "CREATE TABLE $table (
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
name VARCHAR(255) NOT NULL,
email VARCHAR(255) NOT NULL,
PRIMARY KEY (id)
);";

همه چیز عالیه
😐 اما مدتی بعد...
تصمیم می‌گیری شماره موبایل مشتری رو هم ذخیره کنی.
یعنی جدول باید این شکلی بشه:

phone VARCHAR(20) NOT NULL

حالا اگر دوباره همون CREATE TABLE رو اجرا کنی چی میشه؟
جدول از قبل وجود داره.
ستون جدید اضافه نمیشه.
افزونه روی سایت هزاران کاربر ناقص کار می‌کنه.
راهکار حرفه‌ای وردپرس
به جای اجرای مستقیم SQL از:
dbDelta();
استفاده کن.
require_once ABSPATH . 'wp-admin/includes/upgrade.php';

dbDelta( $sql );

🔥 dbDelta() چه کار می‌کنه؟
اگر جدول وجود نداشته باشه:
می‌سازه.
اگر ستون جدید اضافه کرده باشی:
فقط همون ستون رو اضافه می‌کنه.
اگر Index جدید تعریف کرده باشی:
اون رو هم اعمال می‌کنه.
بدون اینکه اطلاعات قبلی کاربران حذف بشه.

📌 مثال واقعی

نسخه 1.0
id
name
email

نسخه 1.1
id
name
email
phone


کافیه مقدار $sql رو تغییر بدی و دوباره:
dbDelta( $sql );

رو اجرا کنی.
وردپرس خودش تشخیص میده فقط ستون phone کم شده و همون رو اضافه می‌کنه.

⚠️ نکته مهم

dbDelta() فقط زمانی درست کار می‌کنه که SQL رو مطابق استاندارد وردپرس بنویسی.
مثلاً:

✔️ حتماً PRIMARY KEY با دو فاصله قبل از پرانتز نوشته بشه:

PRIMARY KEY (id)

و بهتره از:
require_once ABSPATH . 'wp-admin/includes/upgrade.php';

قبل از فراخوانی dbDelta() استفاده کنی، چون این تابع به‌صورت پیش‌فرض در همه درخواست‌ها بارگذاری نشده است.

💎 قانون Seniorها
برنامه‌نویس حرفه‌ای فقط به نصب افزونه فکر نمی‌کنه...
به این فکر می‌کنه که نسخه ۱.۵ افزونه روی سایت ۵۰ هزار کاربر، بدون از دست رفتن حتی یک رکورد، به‌روزرسانی بشه.

😏 اگر تا امروز فقط از CREATE TABLE استفاده می‌کردی الان می‌دونی چرا تیم توسعه وردپرس dbDelta() رو ساخته. 😉

@wpheart
2
#اطلاع_رسانی ❗️فوری

سلام و عرض ادب، به یک نفر نیازمندیم برای طراحی یک صفحه معرفی افزونه و امکانات آن با المنتور

سلیقه خوب
رعایت کلیه نکات طراحی
تسلط کافی به المنتور

جهت کسب اطلاعات بیشتر لطفا به آیدی @mim_da پیام بدید.
🚨میدونی که Nonce وردپرس «رمز یک‌بارمصرف» نیست!

خیلی‌ها فکر می‌کنن وقتی اینو می‌نویسن:

wp_nonce_field( 'delete_product', 'my_nonce' );

دیگه عملیاتش کاملاً امن شده.
اما کاملا اشتباه!

Nonce در وردپرس احراز هویت نیست و به‌تنهایی مجوز انجام عملیات نمی‌ده.


پس Nonce دقیقاً چیکار می‌کنه؟

Nonce عمدتاً برای مقابله با CSRF استفاده می‌شه.

یعنی کمک می‌کنه بفهمیم:

این درخواست احتمالاً از همان سایت و جریان مورد انتظار ارسال شده؟

اما این به معنی این نیست که:

این کاربر اجازه انجام این عملیات را دارد.
در مثال زیر یک کد ناقص رو میبینیم :

if ( wp_verify_nonce(
$_POST['my_nonce'],
'delete_product'
) ) {

wp_delete_post( $product_id );

}


اینجا فقط Nonce بررسی شده.

اما Capability کاربر بررسی نشده!
روش حرفه‌ای که در مثال زیر یک تکه کد کامل و اصولی رو میبینیم :

if ( ! current_user_can( 'delete_post', $product_id ) ) {
wp_die( 'Access denied' );
}

if ( ! wp_verify_nonce(
$_POST['my_nonce'] ?? '',
'delete_product'
) ) {
wp_die( 'Invalid request' );
}

wp_delete_post( $product_id );



اینجا دو موضوع جدا بررسی می‌شن:

Nonce → آیا درخواست معتبر/مورد انتظار است؟

Capability → آیا این کاربر اجازه انجام این کار را دارد؟

🤯 و یک نکته خفن‌تر که باید بدونید !

اسمش Nonce هست، اما در وردپرس الزاماً یک‌بارمصرف نیست!

Nonceهای وردپرس معمولاً در یک بازه زمانی قابل استفاده مجدد هستند و عمر پیش‌فرضشان حدود ۱۲ تا ۲۴ ساعت است؛ بنابراین نباید آن را با OTP یا Token یک‌بارمصرف اشتباه گرفت.

💎 قانون حرفه‌ای وردپرس که توسعه دهنده ها باید بدونن :

Nonce = محافظت در برابر CSRF
Capability = کنترل دسترسی
Authentication = شناسایی کاربر

این سه تا را با هم قاطی نکن. 🔥

بیشتر بدون 👇👇👇
@wpheart
1
🚀🔥 دلیورس بالاخره منتشر شد!
اگه یه فروشگاه ووکامرسی داری و هنوز برای محاسبه هزینه ارسال، مدیریت پیک، محدوده سرویس‌دهی و آدرس مشتری‌ها درگیری، این افزونه دقیقاً برای تو ساخته شده! 😎
معرفی می‌کنم:
#️⃣ افزونه دلیورس | سیستم حرفه‌ای مدیریت ارسال ووکامرس
با دلیورس می‌تونی:
📍 محاسبه هوشمند هزینه ارسال بر اساس مسافت
🗺️ انتخاب آدرس مشتری روی نقشه نشان
🏪 مدیریت چند شعبه و مبدا ارسال
🚚 اتصال به سرویس‌های پیک و درخواست آنلاین پیک
📦 تعیین محدوده قابل سرویس‌دهی
امکان تعیین بازه‌های زمانی ارسال
📱 ارسال پیامک‌های اطلاع‌رسانی
📋 مدیریت و مشاهده سفارش‌ها و وضعیت ارسال
👤 مدیریت آدرس‌های مشتری
📊 امکانات مدیریتی برای کنترل بهتر ارسال سفارشات
یعنی به‌جای اینکه سفارش‌ها، آدرس‌ها و ارسال‌ها رو دستی مدیریت کنی،
دلیورس بخش بزرگی از فرآیند ارسال فروشگاهت رو یکجا مدیریت می‌کنه. 💪
━━━━━━━━━━━━━━
🔥🔥 تخفیف ویژه انتشار!
💥 الان دلیورس با ۷۰٪ تخفیف در راست‌چین عرضه شده!
اگه قصد داری سیستم ارسال فروشگاهت رو حرفه‌ای‌تر کنی،
الان بهترین زمان خریدشه.
👇 همین الان ببینش و قبل از تموم شدن تخفیف
تهیه‌ش کن:

🛒 افزونه دلیورس در راست‌چین
1👍1
🚨 می‌تونی مقدار یک Option وردپرس رو بدون حتی یک Query تغییر بدی!

خیلی‌ها برای تغییر مقدار یک تنظیم میرن سراغ:

update_option(
'my_setting',
'new_value'
);


اما وردپرس یک هوک خیلی خفن داره که می‌تونه قبل از اینکه get_option() سراغ دیتابیس بره مقدار رو برات برگردونه:
pre_option_{$option}


😳 مثال واقعی
فرض کن این Option رو داری:
get_option( 'my_api_url' );


می‌تونی بدون دست زدن به دیتابیس کاری کنی همیشه مقدار دلخواهت برگرده:
add_filter(
'pre_option_my_api_url',
function () {
return 'https://api.example.com/v2';
}
);


از این لحظه:
get_option( 'my_api_url' );

همین مقدار رو دریافت می‌کنه.


🔥 کاربردش کجاست؟
فرض کن یک افزونه قدیمی داری که داخل صدها جای مختلف نوشته:
get_option( 'my_plugin_mode' );


لازم نیست بری همه فایل‌ها رو تغییر بدی.
می‌تونی مقدار Option رو از بیرون Override کنی:
add_filter(
'pre_option_my_plugin_mode',
function () {
return 'production';
}
);


بدون:
تغییر دیتابیس

تغییر کد افزونه

اجرای update_option()


🤯 حتی جالب‌تر...
همین تکنیک برای بعضی Optionهای هسته وردپرس هم قابل استفاده است.
مثلاً:
add_filter(
'pre_option_blogname',
function () {
return 'قلب وردپرس ❤️';
}
);

حالا:
get_option( 'blogname' );

مقدار جدید رو برمی‌گردونه؛ در حالی که مقدار اصلی دیتابیس دست نخورده باقی مونده.


⚠️ ولی حواست باشه!
این تکنیک برای تغییر دائمی تنظیمات نیست.
اگر می‌خوای مقدار واقعاً در دیتابیس ذخیره بشه:
update_option()


راه درستشه.
pre_option_* بیشتر برای:
🔹 Override موقت

🔹 تست و Debug

🔹 Environmentهای مختلف

🔹 تغییر رفتار افزونه بدون دستکاری سورس

🔹 سیستم‌های Multi-site / Multi-environment
استفاده میشه.


💎 نکته‌ای که خیلی‌ها نمی‌دونن:
وردپرس فقط یک سیستم ذخیره‌سازی نیست؛ خیلی از APIهای هسته قابل Intercept شدن هستن.
یعنی قبل از اینکه وردپرس کاری رو انجام بده، می‌تونی وارد جریانش بشی و نتیجه رو تغییر بدی.
این یعنی قدرت واقعی Hookهای وردپرس. 🔥


💬 حالا سؤال:
اگر قرار بود بدون تغییر دیتابیس، یکی از Optionهای سایتت رو Override کنی، کدوم Option رو انتخاب می‌کردی؟
جوابت رو کامنت کن 👇
📌 @wpheart
❤️ قلب وردپرس
2👎2
🚀🔥 دلیورس 1.1.0 منتشر شد!
نسخه جدید دلیورس با چند تغییر اساسی و مهم آماده‌ست! 😎
اگر دلیورس رو برای مدیریت ارسال فروشگاهت می‌خوای، این آپدیت رو از دست نده 👇
🏪 مدیریت نامحدود شعبه‌ها
دیگه محدود به تعداد مشخصی شعبه نیستی!

هر تعداد شعبه که داری اضافه کن و اطلاعات هر شعبه رو مدیریت کن.
🗺️ نمایش شعب روی نقشه
شعبه‌ها رو روی نقشه ببین، موقعیت هر شعبه مشخص باشه و اطلاعات شعبه‌ها رو سریع و راحت در اختیار داشته باش. 📍
🏙️ محدود کردن فعالیت دلیورس به یک شهر
فروشگاهت فقط در یک شهر فعالیت می‌کنه؟

دلیورس رو فقط برای همون شهر فعال کن تا فرآیند ثبت آدرس و ارسال دقیق‌تر و کنترل‌شده‌تر انجام بشه. 🎯
سرعت بیشتر، عملکرد بهتر
در نسخه 1.1.0 روی بهینه‌سازی درخواست‌ها و عملکرد افزونه کار کردیم تا دلیورس سریع‌تر، روان‌تر و بهینه‌تر اجرا بشه.
━━━━━━━━━━━━━━
🔥 دلیورس فقط یک افزونه ارسال نیست؛
قراره مدیریت ارسال فروشگاه ووکامرسی رو حرفه‌ای‌تر و ساده‌تر کنه. 🚚
🎁 و اگر هنوز تهیه‌ش نکردی:
همین الان از راستچین تهیه کن! 🔥
👇 نسخه 1.1.0 رو ببین و دلیورس رو به فروشگاهت اضافه کن.

خرید افزونه از راستچین


#دلیورس #ووکامرس #وردپرس #افزونه_وردپرس #فروشگاه_اینترنتی #ارسال_سفارش #مدیریت_شعب #پیک #ووکامرس_فارسی
قلب وردپرس | آموزش جامع pinned «🚀🔥 دلیورس 1.1.0 منتشر شد! نسخه جدید دلیورس با چند تغییر اساسی و مهم آماده‌ست! 😎 اگر دلیورس رو برای مدیریت ارسال فروشگاهت می‌خوای، این آپدیت رو از دست نده 👇 🏪 مدیریت نامحدود شعبه‌ها دیگه محدود به تعداد مشخصی شعبه نیستی! هر تعداد شعبه که داری اضافه کن و اطلاعات…»