تابع update_option در وردپرس
update_option() یکی از مهمترین توابع در هسته وردپرس است که برای مدیریت و بهروزرسانی دادههای ذخیرهشده در جدول wp_options مورد استفاده قرار میگیرد. این تابع به توسعهدهندگان امکان میدهد تا مقادیر تنظیمات (Options) سفارشی خود را بهروزرسانی کرده و در سراسر سایت از آنها استفاده کنند. در این آموزش، به بررسی کامل نحوه استفاده، منطق عملکرد، نکات امنیتی و بهترین شیوههای استفاده از update_option() خواهیم پرداخت.مفهوم Option در وردپرس چیست؟
در وردپرس، Optionها دادههایی هستند که بهصورت کلید و مقدار (Key/Value) در جدول wp_options پایگاه داده ذخیره میشوند. این دادهها معمولاً برای تنظیمات قالب، افزونهها یا پیکربندیهای سفارشی مورد استفاده قرار میگیرند. برای مثال، نام سایت، آدرس ایمیل مدیریت یا وضعیت فعال بودن یک افزونه خاص میتواند در قالب Option ذخیره شود.
ساختار جدول wp_options
| ستون | توضیح |
|---|---|
option_id | شناسه یکتا برای هر گزینه |
option_name | نام کلید (Key) گزینه |
option_value | مقدار ذخیرهشده برای گزینه |
autoload | تعیین میکند که آیا گزینه هنگام بارگذاری وردپرس بهصورت خودکار بارگذاری شود یا خیر |
نحوه استفاده از تابع update_option()
تابع update_option() برای بهروزرسانی مقدار یک Option در وردپرس به کار میرود. اگر Option مورد نظر وجود نداشته باشد، این تابع آن را ایجاد میکند. در سادهترین حالت، شکل کلی استفاده از این تابع به صورت زیر است:
update_option( $option_name, $new_value, $autoload );
- $option_name: نام گزینهای که باید بهروزرسانی شود.
- $new_value: مقدار جدیدی که میخواهید برای گزینه ذخیره کنید.
- $autoload (اختیاری): اگر مقدار آن ‘yes’ باشد، وردپرس این گزینه را هنگام بارگذاری خودکار به حافظه اضافه میکند.
مثال ساده از استفاده تابع
update_option( 'site_color', 'blue' );
در این مثال، اگر گزینهای با نام site_color وجود داشته باشد، مقدار آن به “blue” تغییر میکند. در غیر این صورت، وردپرس گزینه را ایجاد کرده و سپس مقدار را ذخیره میکند.
بررسی مقدار بازگشتی تابع
تابع update_option() مقدار بولی (Boolean) بازمیگرداند:
true: اگر مقدار گزینه با موفقیت تغییر کرده باشد.false: اگر مقدار جدید با مقدار فعلی تفاوتی نداشته باشد یا خطایی رخ داده باشد.
تفاوت بین update_option() و add_option()
گاهی اوقات توسعهدهندگان تازهکار تفاوت بین این دو تابع را نمیدانند. جدول زیر تفاوت آنها را نشان میدهد:
| تابع | توضیح |
|---|---|
add_option() | یک گزینه جدید اضافه میکند. اگر گزینه از قبل وجود داشته باشد، خطا میدهد. |
update_option() | اگر گزینه وجود داشته باشد مقدار آن را بهروزرسانی میکند، و اگر وجود نداشته باشد آن را ایجاد میکند. |
نمونه کاربردی مقایسهای
// ایجاد گزینه جدید
add_option( 'custom_message', 'Welcome!' );
// بهروزرسانی مقدار در صورت تغییر
update_option( 'custom_message', 'Hello User!' );
در مثال بالا، ابتدا گزینه ایجاد میشود و سپس در صورت وجود، مقدار آن بهروزرسانی میگردد.
نکات امنیتی هنگام استفاده از update_option()
از آنجا که این تابع دادهها را مستقیماً در پایگاه داده ذخیره میکند، رعایت نکات امنیتی ضروری است:
- قبل از ذخیره مقدار جدید، دادهها را با توابعی مانند
sanitize_text_field()یاesc_url()تمیز (Sanitize) کنید. - برای دادههای آرایهای، از
array_map()جهت پاکسازی تمام مقادیر استفاده کنید. - هرگز دادههای ارسالشده از کاربر را مستقیماً در
update_option()قرار ندهید.
نمونه کد ایمنتر:
$new_email = isset($_POST['admin_email']) ? sanitize_email($_POST['admin_email']) : '';
if ( !empty($new_email) ) {
update_option( 'admin_email', $new_email );
}
در این مثال، ابتدا مقدار ایمیل ارسالشده از فرم بررسی و تمیز میشود و سپس فقط در صورت معتبر بودن در پایگاه داده ذخیره خواهد شد.
بهروزرسانی دادههای پیچیده با آرایهها
تابع update_option() فقط برای رشتهها نیست؛ میتوانید دادههای آرایهای یا حتی شیء (Object) را نیز در آن ذخیره کنید. وردپرس بهصورت خودکار داده را سریالسازی (Serialize) میکند.
$settings = array(
'color' => 'green',
'font_size' => '16px',
'layout' => 'boxed'
);
update_option( 'theme_settings', $settings );
در این حالت، تمام دادههای تنظیمات قالب بهصورت آرایه در جدول wp_options ذخیره میشوند. برای بازیابی آن میتوانید از get_option() استفاده کنید.
$theme_settings = get_option( 'theme_settings' );
echo $theme_settings['color'];
در نتیجه مقدار «green» چاپ خواهد شد.
بهترین شیوهها (Best Practices) برای استفاده از update_option()
- از نامهای منحصربهفرد استفاده کنید: برای جلوگیری از تداخل با سایر افزونهها یا قالبها، از پیشوند خاص خود مانند
myplugin_استفاده کنید. - لود خودکار (Autoload) را با دقت تنظیم کنید: اگر گزینهها حجم بالایی دارند، از autoload برابر با
'no'استفاده کنید تا از کاهش سرعت بارگذاری جلوگیری شود. - از کش (Cache) استفاده کنید: هنگام ذخیرهسازی مکرر دادهها، بهتر است از transientها یا object cache استفاده کنید.
نمونهای از تنظیم Autoload
update_option( 'myplugin_large_data', $data_array, 'no' );
در این حالت، وردپرس داده را فقط هنگام نیاز بارگذاری میکند، نه در هر بار اجرای سیستم.
مشکلات رایج و نحوه رفع آنها
| مشکل | علت | راهحل |
|---|---|---|
| مقدار جدید ذخیره نمیشود | مقدار جدید مشابه مقدار قبلی است | ابتدا بررسی کنید مقدار جدید با مقدار فعلی تفاوت داشته باشد |
| خطای مجوز یا دسترسی | کاربر سطح دسترسی لازم ندارد | از توابعی مانند current_user_can() برای بررسی نقش کاربر استفاده کنید |
| کاهش سرعت بارگذاری سایت | تعداد زیاد Option با Autoload برابر yes | گزینههای حجیم را با Autoload = ‘no’ ذخیره کنید |
نمونه کاربردی در افزونه سفارشی
فرض کنید میخواهید در یک افزونه، تنظیمات سفارشی کاربران را ذخیره کنید:
function myplugin_save_settings() {
if ( isset($_POST['submit_settings']) ) {
$settings = array(
'display_mode' => sanitize_text_field($_POST['display_mode']),
'notification' => isset($_POST['notification']) ? 1 : 0,
);
update_option( 'myplugin_user_settings', $settings );
}
}
add_action( 'admin_post_myplugin_save', 'myplugin_save_settings' );
در این مثال، دادهها از فرم مدیریتی گرفته شده، تمیز میشوند و سپس بهصورت ایمن در پایگاه داده ذخیره میگردند.
جمعبندی نکات کلیدی
update_option()هم برای ایجاد و هم برای بهروزرسانی دادهها استفاده میشود.- قبل از ذخیره دادهها، حتماً آنها را پاکسازی کنید.
- گزینههای بزرگ را با
autoload = 'no'ذخیره نمایید. - از نامهای یکتا برای گزینهها جهت جلوگیری از تداخل استفاده کنید.
- برای تست عملکرد تابع، از
error_log()یاvar_dump()استفاده کنید.
نتیجهگیری فنی
تابع update_option() یکی از پایهایترین ابزارها برای توسعه حرفهای در وردپرس است. درک دقیق از نحوه عملکرد آن در ذخیره و بازیابی دادهها، نه تنها باعث افزایش کارایی کد شما میشود بلکه در امنیت و بهینهسازی دیتابیس نیز نقش مهمی دارد. با رعایت اصول امنیتی، ساختار مناسب دادهها و استفاده از نامگذاری استاندارد، میتوانید افزونهها و قالبهایی حرفهایتر و پایدارتر ایجاد کنید.
آیا این مطلب برای شما مفید بود ؟




