ویژگی تصویر

تابع get_option در وردپرس

  /  وردپرس   /  تابع get_option در وردپرس
بنر تبلیغاتی الف
wp - wordpress - وردپرس

در این مقاله به بررسی تابع get_option() در WordPress می‌پردازیم. مفهوم، منطق، کاربردها و نکات مهم در استفاده از این تابع را به زبان فارسی توضیح می‌دهیم و در انتها با مثال‌های کد همراه با توضیح، بهترین روش‌ها را نشان می‌دهیم.

مقدمه: جدول «گزینه‌ها» در وردپرس چیست؟

<pوردپرس از جدولی به نام wp_options (یا در صورت تغییر پیشوند، جدول مشابهی) برای ذخیره تنظیمات و گزینه‌های سایت استفاده می‌کند. این گزینه‌ها می‌توانند تنظیمات هسته وردپرس، تنظیمات پوسته، تنظیمات افزونه‌ها و حتی داده‌هایی باشند که خودتان ذخیره کرده‌اید. تابع get_option() برای بازیابی مقادیر از این جدول به کار می‌رود.

تعریف و امضای تابع

تابع get_option دارای امضای زیر است:

mixed get_option( string $option, mixed $default_value = false )

پارامترها:

  • $option (رشته): نام گزینه‌ای که می‌خواهید مقدارش را بگیرید (برای مثال 'blogname')
  • $default_value (اختیاری): اگر گزینه وجود نداشت، مقداری که برگردانده شود را تعیین می‌کند. به صورت پیش‌فرض false است. :contentReference[oaicite:1]{index=1}

نحوه کارکرد تابع

مراحل کلی اجرای تابع:

    • <liٔ ابتدا بررسی می‌کند نام گزینه وارد شده معتبر است یا خیر. :contentReference[oaicite:2]{index=2}

<liٔ بررسی می‌کند آیا گزینه در حافظه کش (cache) بارگذاری شده است یا خیر. اگر بله، مقدار از کش بازگردانده می‌شود. :contentReference[oaicite:3]{index=3}

<liٔ اگر در کش نبود، یک پرس‌وجوی دیتابیس انجام می‌شود تا گزینه از جدول wp_options خوانده شود. :contentReference[oaicite:4]{index=4}

<liٔ اگر مقدار داده شده سریال‌شده (serialized) بود، وردپرس آن را بازیابی (unserialize) می‌کند تا نوع اصلی دیتا برگردد (مثلاً آرایه). :contentReference[oaicite:5]{index=5}

<liٔ در نهایت مقدار بازگردانده می‌شود؛ اگر گزینه وجود نداشت، مقدار $default_value (یا در صورت نبود آن، false) بازگردانده خواهد شد. :contentReference[oaicite:6]{index=6}

چرا استفاده از get_option اهمیت دارد؟

در زیر چند دلیل اصلی را بررسی می‌کنیم:

    • مدیریت متمرکز تنظیمات: با استفاده از گزینه‌های ذخیره شده در دیتابیس، می‌توان تنظیمات را در یک محل جمع کرد و از توکار بودن تابع برای بازیابی استفاده کرد. :contentReference[oaicite:7]{index=7}
    • عملکرد بهبود یافته: چون وردپرس از کش برای گزینه‌ها استفاده می‌کند، تابع بسیار سریع‌تر از اجرای دستی پرس‌وجوی SQL خواهد بود. :contentReference[oaicite:8]{index=8}

<liقابلیت افزونه‌پذیری (Extensibility): افزونه‌ها و پوسته‌ها می‌توانند تنظیمات خود را در جدول گزینه‌ها ذخیره کنند و سپس با get_option آن را بازیابی نمایند. این باعث می‌شود کد توسعه‌پذیرتر باشد. :contentReference[oaicite:9]{index=9}

  • پرهیز از کوئری مستقیم: به جای نوشتن دستی پرس‌وجوی SQL برای جدول گزینه‌ها، بهتر است از تابع رسمی استفاده کنیم تا هم امنیت و هم تداوم سازگاری با نسخه‌های بعدی وردپرس حفظ شود. :contentReference[oaicite:10]{index=10}

 

کاربردهای عملی تابع get_option()

در این بخش، چند سناریوی کاربردی و پرکاربرد را همراه با نمونه کد بررسی می‌کنیم.

مثال­‌ی ۱: بازیابی نام وبلاگ

<?php
$blog_name = get_option('blogname');
echo '<h1>' . esc_html( $blog_name ) . '</h1>';
?>

در این کد، مقدار گزینهٔ blogname (عنوان سایت) بازیابی می‌شود و سپس با تابع esc_html() برای اچ‌تی‌ام‌ال امن‌سازی شده و چاپ می‌گردد. این یک کاربرد ساده اما رایج است.

مثال­‌ی ۲: استفاده از مقدار پیش‌فرض

<?php
$custom_value = get_option('my_plugin_option', 'default_value');
echo 'Plugin option: ' . esc_html( $custom_value );
?>

در این مثال اگر گزینهٔ my_plugin_option در دیتابیس وجود نداشته باشد، مقدار «default_value» بازگردانده خواهد شد. این روش بهترین شیوه برای جلوگیری از مقدار «false» و در نتیجه بروز خطاهاست. :contentReference[oaicite:11]{index=11}

مثال­‌ی ۳: بازیابی آرایه یا دادهٔ پیچیده

<?php
$options = get_option('my_theme_settings', array(
    'color' => 'blue',
    'layout' => 'full'
));

if ( isset( $options['color'] ) ) {
    echo 'Color: ' . esc_html( $options['color'] );
}
?>

در اینجا ما فرض کرده‌ایم که گزینه my_theme_settings می‌تواند یک آرایه باشد که تنظیمات پوسته را نگه می‌دارد. با استفاده از پیش‌فرض آرایه، تضمین می‌کنیم که اگر گزینه وجود نداشت، کد ما باز هم بدون خطا اجرا شود.

بهترین شیوه‌ها و نکات مهم (Best Practices)

در ادامه نکاتی که به کارایی، امنیت و قابلیت نگهداری کد کمک می‌کنند را بررسی می‌کنیم:

  • استفاده از مقدار پیش‌فرض: همیشه در تابع get_option مقدار پیش‌فرض مشخص کنید تا از بازگشت false جلوگیری شود. این کار خطاها را کم می‌کند. :contentReference[oaicite:12]{index=12}
  • ذخیره در متغیر خارج از حلقه: اگر در یک صفحه چند بار به همان گزینه نیاز دارید، فقط یک بار get_option را صدا بزنید و نتیجه را در متغیری ذخیره کنید تا تعداد کوئری‌ها کاهش یابد. :contentReference[oaicite:13]{index=13}
  • اعتبارسنجی و پاک‌سازی (Sanitization): مقادیری که از دیتابیس می‌آیند ممکن است نیاز به پاک‌سازی داشته باشند قبل از استفاده در خروجی HTML یا SQL. استفاده از توابعی مثل esc_html()، esc_attr() و … توصیه می‌شود.
  • تمیز نگه‌داشتن نام گزینه‌ها: هنگام ساخت پلاگین یا پوسته، نام گزینه‌ها باید یکتا و مشخص باشد (مثلاً پیشوند داشته باشند) تا با دیگر تنظیمات تداخل نداشته باشد.
  • جست‌وجوی زیاد در دیتابیس را کاهش دهید: حتی اگر تابع از کش استفاده می‌کند، باز هم صدا زدن مکرر آن در درخواست‌های زیاد می‌تواند مصرف منابع را بالا ببرد. بهتر است نتیجه را در متغیری منحصر به آن درخواست ذخیره کنید.
  • برای داده‌های بزرگ یا رابطه‌ای، گزینه‌ها مناسب نیستند: اگر بخواهید داده‌های رابطه‌ای یا جداول پیچیده استفاده کنید، بهتر است از جداول اختصاصی در دیتابیس استفاده کنید تا گزینه‌ها مناسب نباشند. :contentReference[oaicite:14]{index=14}

پرسش‌های رایج (FAQ)

سؤالپاسخ
فرق بین get_option() و get_user_option() چیست؟get_option() گزینه‌ای را برای کل سایت بازیابی می‌کند، در حالی که get_user_option() گزینه مخصوص یک کاربر خاص را برگشت می‌دهد. :contentReference[oaicite:15]{index=15}
اگر گزینه وجود نداشته باشد، چه می‌شود؟اگر مقدار پیش‌فرض داده نشده باشد، false برمی‌گردد؛ در غیر این صورت مقدار پیش‌فرض بازگردانده می‌شود. :contentReference[oaicite:16]{index=16}
آیا get_option همیشه نوع دادهٔ ذخیره‌شده را دقیق بازمی‌گرداند؟خیر. اگر گزینه‌ها از نوع scalar (مانند true, 0, null) باشند، اغلب به صورت رشته برمی‌گردند. اما اگر دادهٔ سریال‌شده (مثلاً آرایه) ذخیره شده باشد، همان نوع بازمی‌گردد. :contentReference[oaicite:17]{index=17}

مثال کامل: ساخت یک تنظیم برای افزونه با get_option()

فرض کنید افزونه‌ای دارید که می‌خواهد کاربر بتواند رنگ پس‌زمینه را در بخش تنظیمات وارد کند. روند کار می‌تواند به صورت زیر باشد:

<?php
// هنگام فعال‌سازی افزونه، یک گزینه پیش‌فرض اضافه می‌کنیم
register_activation_hook( __FILE__, 'my_plugin_activate' );

function my_plugin_activate() {
    add_option( 'my_plugin_bg_color', '#ffffff' );
}

// در تنظیمات افزونه، کاربر رنگ را انتخاب می‌کند و ذخیره می‌شود
function my_plugin_settings_page() {
    if ( isset( $_POST['bg_color'] ) ) {
        $color = sanitize_hex_color( $_POST['bg_color'] );
        update_option( 'my_plugin_bg_color', $color );
    }

    $bg_color = get_option( 'my_plugin_bg_color', '#ffffff' );
    ?>
    <form method="post">
      <label>رنگ پس‌زمینه:</label>
      <input type="text" name="bg_color" value="<?php echo esc_attr( $bg_color ); ?>">
      <input type="submit" value="ذخیره">
    </form>
    <?php
}
?>

در این کد:

  • در تابع «activate»، گزینه‌ای با مقدار پیش‌فرض اضافه می‌کنیم.
  • در صفحه تنظیمات، مقدار ارسال‌شده توسط کاربر را پاک‌سازی می‌کنیم و با update_option() به‌روزرسانی می‌کنیم.
  • برای نمایش فرم، مقدار کنونی گزینه را با get_option می‌گیریم و اگر وجود نداشت، مقدار پیش‌فرض «#ffffff» را استفاده می‌کنیم.

جمع‌بندی

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

آیا این مطلب برای شما مفید بود ؟

خیر
بله
موضوعات شما در انجمن: