آموزش پلاگین نویسی در وردپرس از صفر تا صد – قسمت دوم

نوشته شده توسط ۲ سال پیش

بخش دوم ایجاد صفحه در بخش مدیریت:

آموزش پلاگین نویسی
برای افزودن صفحه به منوی ادمین وردپرس از هوک admin_menu استفاده میکنیم.هر منو دارای یک منوی اصلی وتعدادی زیر منو میباشد. برای ایجاد منوی اصلی از تابع add_menu_page استفاده میشود.توجه داشته باشید منوها به صورت پیشفرض در انتهای لیست منوهای بخش مدیریت وردپرس قرار خواهد گرفت.

add_menu_page(page_title, menu_title, capability, menu_slug, function , icon_url , position )

page_title:عنوان برگه منو که وقتی وارد صفحه منو میشوید در title صفحه نمایش داده میشود
menu_title: عنوانی که در منوی اصلی نمایش داده میشود
capability: سطح دسترسی که میتواند به این منو دسترسی داشته باشد.
توجه :برای ایجاد سطح دسترسی میتوانید از نام نقش(role) مورد نظر مانند administrator یا از توانایی(capability) مانند manage_options استفده کنید تفاوت ایندو در این هست که با استفاده از نام نقش فقط کاربر های آن نقش مثلا فقط ادمینها به این بخش دسترسی دارند و با استفاده از توانایی مجموعه کاربرهایی که توانایی انجام این کار را دارند در اینجا ادمینها و ویرایشگرها قابلیت دسترسی به این برگه را دارند.
menu_slug:اسلاگی که برای منو در نظر گرفته میشود و در ادرس بار نمایش داده میشود
Function:نام تابعی که برگه منو را فراخوانی میکند
icon_url :آدرس ایکونی که برای منو نمایش داده میشود و اختیاری میباشد
position :مکان قرار گرفتن منو که یک مقدار عددی بزرگتر از ۰ و اختیاری میباشد

زیر منو

برای افزودن زیرمنو از تابع add_submenu_page استفاده میشود.

add_submenu_page(parent_slug, page_title, menu_title, capability, menu_slug, function )

parent_slug:این مقدار به وردپرس میگوید زیرمنو مربوط به کدام ایتم از منو اصلی میباشد و مقدار آن برابر مقدار function از تابع add_menu_page میباشد
page_title: عنوان برگه منو که وقتی وارد صفحه منو میشوید در title صفحه نمایش داده میشود
menu_title: عنوانی که برای این زیرمنو نمایش داده میشود
capability: سطح دسترسی که میتواند به این منو دسترسی داشته باشد
menu_slug: اسلاگی که برای منو در نظر گرفته میشود و در ادرس بار نمایش داده میشود
function : مکان قرار گرفتن منو که یک مقدار عددی بزرگتر از ۰ و اختیاری میباشد
خب هر گاه نیاز به حذف منو یا زیر منو نیاز باشد از توابع زیر استفاده میشود.

برای حذف یک منوی اصلی یا top menu از تابع: remove_menu_page استفاده میشود

remove_menu_page( menu_slug );

menu_slug :اسلاگ منوی مورد نظر که نیاز به حذف آن دارید
و برای حذف یک زیرمنو از تابع remove_submenu_page استفاده میشود

remove_submenu_page( menu_slug, submenu_slug );

:menu_slugاسلاگ منوی اصلی یا top menu که نیاز دارید زیر منوی آن حذف شود
submenu_slug :اسلاگ زیرمنوی مورد نظر که نیاز دارید حذف شود.
علاوه بر این توابع اصلی برای فزودن یا حذف منو توابع دیگری نیز وجود دارد که به شما این امکان را میدهد تا در بخشهای دیگر از وردپرس منو ایجاد کنید
افزودن به قسمت دشبورد وردپرس:

add_dashboard_page( $page_title, $menu_title, $capability, $menu_slug, $function);
افزودن به بخش تنظیمات وردپرس
add_options_page( $page_title, $menu_title, $capability, $menu_slug, $function);
افزودن به بخش ابزارهای وردپرس
add_management_page( $page_title, $menu_title, $capability, $menu_slug, $function );
افزودن برگه به بخش مدیریت کاربران وردپرس
add_users_page( $page_title, $menu_title, $capability, $menu_slug, $function);
افزودن برگه به بخش مدیریت پلاگین وردپرس
add_plugins_page( $page_title, $menu_title, $capability, $menu_slug, $function);
افزودن برگه به بخش نمایش تمپلیت وردپرس
add_theme_page( $page_title, $menu_title, $capability, $menu_slug, $function );
افزودن برگه به بخش نظرات وردپرس
add_comments_page( $page_title, $menu_title, $capability, $menu_slug, $function);
افزودن به بخش مدیریت برگه های وردپرس
add_pages_page( $page_title, $menu_title, $capability, $menu_slug, $function);
افزودن برگه به بخش مدیا وردپرس
add_media_page( $page_title, $menu_title, $capability, $menu_slug, $function);
افزودن برگه به بخش پست وردپرس
add_posts_page( $page_title, $menu_title, $capability, $menu_slug, $function);

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

<?php
حرکت اول ایجاد هوک به منوی ادمین وردپرس
add_action( 'admin_menu', 'my_plugin_menu' );
حرکت دوم ایجاد تابع هوک و افزودن منو
function my_plugin_menu() {
add_options_page( 'My Plugin Options', 'My Plugin', 'manage_options', 'my-unique-identifier', 'my_plugin_function' );
}
حرکت سوم تعریف تابع نمایش برگه
function my_plugin_function() {
?>
<div class="wrap">
<h2>این یک برگه مدیریت میباشد.</h2>
</div>
<?php
}

توجه داشته باشید در وردپرس محتویات صفحات ادمین در یک div با کلاس wrapقرار میگیرد. <div class=”wrap”> که به نمایش بهتر برگه شما کمک میکند.

ایجاد برگه تنظیمات

برای شروع در این برگه یک سری المان قرار میدهیم به عنوان تنظیمات و ذخیره سازی.
یک فورم داخل صفحه قرار میدهیم و برای چیدمان المانها از جدول استفاده میکنیم یک تکست باکس و یک سلکت باکس قرار میدهیم به صورت زیر

function my_plugin_function(){
?>
<div class="wrap">
<h2>این یک برگه مدیریت میباشد.</h2>

<form method="post" enctype="multipart/form-data">
<table class="widefat">
<thead>
<tr>
<th colspan="2">تنظیمات</th>
</tr>
</thead>
<tr>
<td>تنظیم ۱</td>
<td><input type="text" size="100" name="opt1" placeholder="تنظیم ۱" required="" value="" /></td>
</tr>
<tr>
<td>تنظیم ۲</td>
<td>
<select name="opt3">
<option value="1">بلی</option>
<option value="0">خیر</option>
</select>
</td>
</tr>
<tr>
<td colspan="2"><input type="submit" name="save" value="ذخیره" class="button-primary" /></td>
</tr>
</table>
</form>
</div>
<?php
}

توجه ۱:کلاسهایی مانند button-primary و widefat از کلاسهای استایل خود وردپرس میباشد و برای یکدست شدن و شکیلتر شدن استفاده میشود.شما میتوانید علاوه بر این کلاسهای از استایل و کلاسهایی که خود ایجاد میکنید نیز استفاده کنید.
توجه ۲: خواصی مانند placeholder یا required استفاده از اینها اختیاری بوده ولی به کارایی برگه شما کمک میکند.

بعد از ایجاد فورم تنظیمات نوبت به ذخیره فورم و بازیابی آن میرسد.تنظیمات معمولا در جدول options وردپرس ذخیره میشود و برای ذخیره از تابع update_option و بازیابی از تابع get_option استفاده میشود.
توجه داشته باشید بهتر است تمام تنظیمات در یک فیلد ذخیره شود (مثلا به صورت یک ارایه).زیرا در صورت قرار دادن هر ایتم در یک فیلد به ازای هر تنظیم و استفاده از get_option یک ریکویست به mysql ارسال میشود که این خود باعث اطلاف منابع و فشار به سرور در زمانهای شلوغی سایت میشود.

if(isset($_POST['save'])){
update_option('my_xoptions',$_POST);
echo '<div class="error"><p>تنظیمات با موفقیت ذخیره شد</p></div>';
}

در روش فوق مقدار $_POST که یک متغییر عمومی php که تمام مقادیر postback شده از سمت فورم را به صورت ارایه در اختیار دارد را در جدول تنظیمات در فیلدی بنام my_xoptions ذخیره میکند و بعد از ذخیره پیغامی مبنی بر:” تنظیمات با موفقیت ذخیره شد” نمایش میدهد.
توجه:کلاس error استفاده شده در پیغام از کلاسهای خود وردپرس میباشد که استایل پیغام را به صورت استایل وردپرس تغییر میدهد.

بازیابی تنظیمات

برای بازیابی تنظیمات از تابع get_option به صورت زیر استفاده میشود

$opt = get_option('my_xoptions');
مثال:
function my_plugin_function(){
if(isset($_POST['save'])){
$_POST['opt1'] = esc_sql($_POST['opt1']);
update_option('my_xoptions',$_POST);
echo '<div class="error"><p>تنظیمات با موفقیت ذخیره شد</p></div>';
}
$opt = get_option('my_xoptions');
$op2 = empty($opt['opt3'])?0:$opt['opt3'];
?>
<div class="wrap">
<h2>این یک برگه مدیریت میباشد.</h2>

<form method="post" enctype="multipart/form-data">
<table class="widefat">
<thead>
<tr>
<th colspan="2">تنظیمات</th>
</tr>
</thead>
<tr>
<td>تنظیم ۱</td>
<td><input type="text" size="100" name="opt1" placeholder="تنظیم ۱" required="" value="<?php echo empty($opt['opt1'])?'':$opt['opt1'] ?>" /></td>
</tr>
<tr>
<td>تنظیم ۲</td>
<td>
<select name="opt3">
<option value="1" <?php selected(1,$op2) ?>>بلی</option>
<option value="0" <?php selected(0,$op2) ?>>خیر</option>
</select>
</td>
</tr>
<tr>
<td colspan="2"><input type="submit" name="save" value="ذخیره" class="button-primary" /></td>
</tr>
</table>
</form>
</div>
<?php
}

تابع selected از توابع وردپرس میباشد که برای چک کردن مقدار select ها بکار میرود و در صورت برابر بودن مقدار ، مقدار selected برمیگرداند .
نوشتن شرط به صورت $op2 = empty($opt[‘opt3’])?0:$opt[‘opt3’]; به نام ternary معروف است که بدلیل کم حجم بودن موارد مصرف فراوانی دارد.

اعتبار سنجی

توجه داشته باشید بهتر است قبل از ذخیره مقادیر در صورت نیاز و مخصوصا هنگامی که از کاربر غیر ادمین مقداری دریافت میکنید حتما اعتبار سنجی کنید تا از مشکلات احتمالی جلوگیری شود
تابع زیر برای جلوگیری از sql injection بکار میرود

Esc_sql
$_POST['opt1'] = esc_sql($_POST['opt1']);
یا از توابع sanitize که با sanitize_ شروع میشود استفاده کنید
sanitize_email()
sanitize_file_name()
sanitize_html_class()
sanitize_key()
sanitize_meta()
sanitize_mime_type()
sanitize_option()
sanitize_sql_orderby()
sanitize_text_field()
sanitize_textarea_field()
sanitize_title()
sanitize_title_for_query()
sanitize_title_with_dashes()
sanitize_user()

علاوه بر این روش روش دیگری نیز در وردپرس برای ذخیره تنظیمات و جود دارد با استفاده از توابع وردپرس

register_setting()
add_settings_section()
add_settings_field()
submit_button()

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

https://codex.wordpress.org/Creating_Options_Pages

وردپرس از شما میخواهد در هنگام استفاده از فورم حتما از توابع nonce برای امنیت بیشتر استفاده کنید
(اگر میخواهید پلاگین خود را در وردپرس ثبت کنید حتما به این موضوع توجه داشته باشید)

قسمت بعد هوکها و فیلتر ها در پلاگین

مبین قاسمپور

 دیدگاه های ارسال شده برای این مطلب
  1. سمانه میررجبی گفت:

    احسنت . بسیار آموزش کامل و عالی بود .

  2. علی موسوی گفت:

    سلام ، لطفا این آموزش رو ادامه بدید. خیلی خوب بود. ممنون.

  3. هادی گفت:

    خیلی عالی 🌹 همینطور ادامه دهید

  4. آرزو گفت:

    سلام
    وقتتون بخیر
    آموزشتون خیلی خوب بود کاش ادامه میدادین
    با آرزوی سلامتی و موفقیت