- آموزش زمان بندی رویدادها با WP Cron در وردپرس
- مقدمه ای بر توسعه افزونه
- افزونه چیست ؟
- مبانی افزونه
- نیازمندی های هدر
- درج یک مجوز نرم افزار در افزونه
- قلاب های فعال و غیر فعال سازی
- متدهای حذف در سایت های وردپرس
- امنیت افزونه
- بررسی قابلیت های کاربر
- اعتبار سنجی داده ها
- امنیت ورودی
- امنیت خروجی
- Nonce ها
- قلاب ها
- اکشن ها (Actions)
- فیلترها (Filters)
- ایجاد قلاب های سفارشی
- تاپیک های پیشرفته
- منوهای مدیریت
- منوهای سطح بالا
- زیر منوها
- کدهای کوتاه
- مبانی کدهای کوتاه
- کدهای کوتاه جفتی
- کدهای کوتاه پارامتردار
- تنظیمات
- API های تنظیمات
- ایجاد و استفاده از گزینه ها
- گزینه های تکی و آرایه ای
- صفحه تنظیمات سفارشی
- فراداده (Metadata)
- ایجاد و مدیریت فراداده نوشته
- ایجاد متاباکس های سفارشی
- دریافت فراداده
- انواع نوشته سفارشی
- ایجاد پست تایپ سفارشی
- کار با داده های پست تایپ ها
- طبقه بندی یا Taxonomy در وردپرس
- ایجاد و کار با طبقه بندی های سفارشی
- کار با متادیتا (Metadata) کاربران در وردپرس
- ایجاد و مدیریت کاربران در وردپرس
- نقش ها و قابلیت های کاربران در وردپرس
- آموزش استفاده از سرویس HTTP API در وردپرس
- آموزش استفاده از ایجکس (Ajax) در وردپرس
- آموزش استفاده از Transients برای کش کردن در وردپرس
- آموزش WP-Cron وردپرس
- آموزش استفاده از جیکوئری (jQuery) در وردپرس
- آموزش کار با PHP سمت سرور و Enqueue در وردپرس
- قلاب کردن WP-Cron وردپرس به سیستم زمان بندی سرور
اضافه کردن فیلدهای تنظیمات
شما می توانید توسط تابع add_settings_field() یک فیلد را به یک صفحه موجود ، در تنظیمات افزونه خود اضافه کنید .
تابع فراخوان شما تنها به HTML مناسب با مقادیر ورودی و پر کردن آنها نیاز دارد . عمل ذخیره سازی در پس زمینه انجام می شود .
شما می توانید یک بخش تنظیمات ، در یک صفحه موجود را ، توسط تابع add_settings_section() اضافه کنید .
نکته : برای استفاده از هرگونه گزینه ای توسط تابع add_settings_field() ، شما باید آن را ثبت کنید ، در غیراینصورت آن گزینه ها ذخیره و بروزرسانی اتوماتیک نخواهند شد .
add_settings_field( $id, $title, $callback, $page, $section = 'default', $args = array() )
$id : رشته ای که به عنوان خاصیت شناسه ( id ) برچسب مورد استفاده قرار می گیرد .
$title : عنوان فیلد
$callback : تابع فراخوان که فیلد ها را با ورودی های مورد انتظار ، به عنوان بخشی از فرم ، پر می کند .
نام و آی دی هر فیلد باید با $id این تابع یکی باشد .
$page : نوع صفحه تنظیمات ، که مشخص می کند فیلد های تنظیمات در کدام قسمت تنظیمات وردپرس نمایش داده شوند (همگانی،نوشتن،خواندن،گفتگوها،رسانه و پیوندهای یکتا).
$section : مشخص می کند که ،فیلد جدید به قسمت پیش فرض بخش ها اضافه شود یا به یک بخش که خود شما آن را ایجاد کرده اید .
$args : آرگومان های اضافه را نگهداری می کند .
اضافه کردن بخش های تنظیمات
بخش های تنظیمات ، گروهی از تنظیمات هستند که شما آنها را در صفحه تنظیمات ، با یک عنوان مشترک مشاهده می کنید .
شما می توانید بخش های تنظیمات جدید دلخواه خود را ، به صفحات تنظیمات موجود اضافه کنید ، یا در غیر اینصورت صفحه تنظیمات سفارشی خود را ایجاد ، و بخش های تنظیمات را در آن قرار دهید .
بخش های تنظیمات به افزونه شما امکان نگهداری ساده تر را می دهد و کاربران افزونه راحتتر کار با افزونه را یاد می گیرند .
add_settings_section( $id, $title, $callback, $page )
$id : رشته مورد استفاده برای خاصیت شناسه (id) برچسب
$title : عنوان بخش
$callback :تابع فراخوانی که بخش تنظیمات را با محتوای مورد نظر شما پر می کند . این تابع باید محتوا را در خروجی چاپ کند(مثلاً با دستور echo) .
$page : صفحه تنظیماتی که این بخش تنظیمات باید در آن نمایش داده شود (همگانی ، خواندن ، نوشتن ، رسانه و … ).
ثبت یک تنظیم (Registering a Setting)
از تابع register_settings() برای تعریف یک گزینه (option)، که فیلد تنظیم (setting) در آن ذخیره می شود ، استفاده می شود .
register_setting( $settings_section, $option_name, $sanitize_callback ) unregister_setting( $option_group, $option_name, $sanitize_callback )
$settings_section : نام گروه تنظیمات . این گزینه باید مطابق با “لیست سفید نام کلید گزینه” باشد .
نام های پیش فرض “لیست سفید نام کلید گزینه” شامل general یا همگانی ، discussion یا گفتگوها ، reading یا خواندن و … است .
$option_name : نام گزینه برای پاکسازی و ذخیره شدن . شما از این نام در توابعی مانند get_option() و update_option() استفاده خواهید کرد .
$callback : یک تابع فراخوان که مقدار گزینه را پاکسازی می کند .
نکته : تابع register_setting() همانند توابع add_settings_*() که در بالا توضیح داده شد ، باید در قلاب admin_init فراخوانی شود .
به مثال زیر توجه کنید :
/*
* Add all your sections, fields and settings during admin_init
*/
function wporg_settings_api_init() {
// Add the section to reading settings so we can add our fields to it
add_settings_section(
'wporg_setting_section',
'Example settings section in reading',
'wporg_setting_section_callback_function',
'reading'
);
// Add the field with the names and function to use for our new settings, put it in our new section
add_settings_field(
'wporg_setting_name',
'Example setting Name',
'wporg_setting_callback_function',
'reading',
'wporg_setting_section'
);
// Register our setting in the "reading" settings section
register_setting( 'reading', 'wporg_setting_name' );
}
add_action( 'admin_init', 'wporg_settings_api_init' );
/*
* Settings section callback function
*/
function wporg_setting_section_callback_function() {
echo '<p>Intro text for our settings section</p>';
}
/*
* Callback function for our example setting
*/
function wporg_setting_callback_function() {
$setting = esc_attr( get_option( 'wporg_setting_name' ) );
echo "<input type='text' name='wporg_setting_name' value='$setting' />";
}
استفاده از تنظیمات
داشتن تنظیمات برای افزونه شما خوب است ، اما تا زمانی که از آن تنظیمات استفاده نکنید ، غیرمفید و شاید مضر هم باشند .
برای استفاده از تنظیمات از تابع get_option() استفاده می شود .
تابع get_option() دو پارامتر قبول می کند :
پارامتر اول ، نام گزینه ای است که می خواهید آن را دریافت کنید
و پارامتر اختیاری دوم ، مقدار پیش فرض برای گزینه مورد نظر برای بازیابی
get_option( 'wporg_setting_name', false );
در این مثال ، گزینه ای به نام wprog_setting_name دریافت شده است و چنانچه هیچ مقداری در آن ذخیره نشده باشد ، false به عنوان مقدار پیش فرض برگشت داده می شود .
احتمالاً شما نمی خواهید گزینه ها را به صورت مستقیم فراخوانی کنید ، بنابراین کد شما می تواند شبیه به کد زیر نیز باشد :
$options = get_option( 'wporg_setting_name', false );
اکنون شما گزینه مورد نظر خود را در متغیر $options بارگذاری کرده اید و می توانید آن را در کدهای خود مورد استفاده قرار دهید.
در اینجا یک سناریوی واقعی تر را مشاهده می کنید :
/**
* Add an admin submenu link under Settings
*/
function wporg_add_options_submenu_page() {
add_submenu_page(
'options-general.php', // admin page slug
__( 'WPORG Options', 'wporg' ), // page title
__( 'WPORG Options', 'wporg' ), // menu title
'manage_options', // capability required to see the page
'wporg_options', // admin page slug, e.g. options-general.php?page=wporg_options
'wporg_options_page' // callback function to display the options page
);
}
add_action( 'admin_menu', 'wporg_add_options_submenu_page' );
/**
* Register the settings
*/
function wporg_register_settings() {
register_setting(
'wporg_options', // settings section
'wporg_hide_meta' // setting name
);
}
add_action( 'admin_init', 'wporg_register_settings' );
/**
* Build the options page
*/
function wporg_options_page() {
if ( ! isset( $_REQUEST[fusion_builder_container hundred_percent="yes" overflow="visible"][fusion_builder_row][fusion_builder_column type="1_1" background_position="left top" background_color="" border_size="" border_color="" border_style="solid" spacing="yes" background_image="" background_repeat="no-repeat" padding="" margin_top="0px" margin_bottom="0px" class="" id="" animation_type="" animation_speed="0.3" animation_direction="left" hide_on_mobile="no" center_content="no" min_height="none"]['settings-updated'] ) )
$_REQUEST['settings-updated'] = false; ?>
<div class="wrap">
<?php if ( false !== $_REQUEST['settings-updated'] ) : ?>
<div class="updated fade"><p><strong><?php _e( 'WPORG Options saved!', 'wporg' ); ?></strong></p></div>
<?php endif; ?>
<h2><?php echo esc_html( get_admin_page_title() ); ?></h2>
<div id="poststuff">
<div id="post-body">
<div id="post-body-content">
<form method="post" action="options.php">
<?php settings_fields( 'wporg_options' ); ?>
<?php $options = get_option( 'wporg_hide_meta' ); ?>
<table class="form-table">
<tr valign="top"><th scope="row"><?php _e( 'Hide the post meta information on posts?', 'wporg' ); ?></th>
<td>
<select name="wporg_hide_meta[hide_meta]" id="hide-meta">
<?php $selected = $options['hide_meta']; ?>
<option value="1" <?php selected( $selected, 1 ); ?> >Yes, hide the post meta!</option>
<option value="0" <?php selected( $selected, 0 ); ?> >No, show my post meta!</option>
</select><br />
<label class="description" for="wporg_hide_meta[hide_meta]"><?php _e( 'Toggles whether or not to display post meta under posts.', 'wporg' ); ?></label>
</td>
</tr>
</table>
</form>
</div> <!-- end post-body-content -->
</div> <!-- end post-body -->
</div> <!-- end poststuff -->
</div>
}
در مثال بالا ، یک صفحه از گزینه ها برای یک تنظیم ایجاد شده است ، که توسط آن (منظور تنظیم است) ،اطلاعات متا نوشته ، در زیر محتوای نوشته ، مخفی یا نمایش داده می شود .
یک تنظیم (setting) توسط تابع register_setting() ثبت و توسط تابع get_option() بازیابی شده است .
اگر تصمیم گرفتید که یک تنظیم دیگر را به این صفحه گزینه ها اضافه کنید ، می توانید از نام بخش تنظیمات wprog_options در هنگام فراخوانی تابع register_settings به صورت زیر استفاده کنید :
register_setting( 'wporg_options', 'wporg_new_setting' );
[/fusion_builder_column][/fusion_builder_row][/fusion_builder_container]






