هدف متاباکسها این است که به کاربر نهایی اجازه دهد تا علاوه بر محتوای پست اصلی، اطلاعات اضافهتری را ذخیره کند. مثلاً در یک پست تایپ سفارشی برای فیلمها، فیلدهایی برای سال انتشار، تهیهکننده، مخارج تهیه، درآمد و … قرار دهیم. این کار را میتوانیم برای همهٔ انواع پست نظیر نوشتهها، برگهها، محصولات انجام شود. برای ایجاد یک Meta Box ساده ۳ گام باید برداریم پس با ما همراه باشید.
رجیستر کردن Meta Box توسط اکشن add_meta_boxes انجام میشود و در فانکشن این اکشن باید توسط تابع add_meta_box() متا باکس خود را رجیستر کنیم. این تابع ۷ ورودی میگیرد ۴ ورودی اول اجباری است و ۳ ورودی آخر اختیاری. تابع خام add_meta_box() به شکل زیر است.
add_meta_box($id, $title, $callback, $screen, $context, $priority, $callback_args)
حال به توضیح این ورودی ها میپردازیم که به شرح ذیل میباشد.
در این مثال به عنوان پست تایپ مقدار tin_pt_product وارد شده که در حقیقت نام پست تایپی است که ما ایجاد کردیم اگر میخواهید متا باکس را به پست و یا پیج پیشفرض وردپرس اضافه کنید میتوانید از مقدار post و یا page استفاده کنید.
مشاهده کد های رجیستر کردن Meta Box.
/////////////////////////////////////////////////
//رجیستر کردن متا باکس
/////////////////////////////////////////////////
add_action('add_meta_boxes', 'tit_add_custom_box');
function tit_add_custom_box()
{
add_meta_box(
'tit_box_id', // Unique ID
'تایتل متا باکس', // Box title
'tit_custom_box_html', // Content callback, must be of type callable
'tit_pt_Pproduct', // Post type
'side', //normal , advanced , side
'high' // default , core , high , low
);
}
در این بخش باید کد های html فیلد خود را بزنیم ولی چند نکته مهم در این بخش وجود دارد که در ادامه به آنها اشاره خواهم کرد
نکته ۱ : نام این تابع tin_custom_box_html میباشد و ما در گام اول زمانی که Meta Box را رجیستر میکردیم آن را به تابع add_meta_box() معرفی کردیم. بدیهی است که برای نام این تابع فقط از مقداری که معرفی کردیم میتوانیم استفاده کنیم.
نکته ۲ : متغییری با نام value ایجاد کردیم و توسط تابع get_post_meta() مقدار فیلدی که میخواهیم اضافه کنیم را گرفتیم و توسط همین متغییر به فیلد خود نسبت دادیم تا آن را نمایش دهد. این کار برای این است که اگر کاربر مقداری در این فیلد وارد کرده بود و آن را ذخیره کرده بود زمانی که میخواهد پست را ویرایش کند آن مقدار را ببیند و بتواند ویرایش کند.
نکته ۳ : همان طور که در نکته ۲ گفته شد تابع get_post_meta() وظیفه گرفتن مقداری را دارد که ما در گام سوم ذخیره کردیم و سه ورودی میگیرد که به شرح ذیل است :
مشاهده تابع خام get_post_meta()
get_post_meta($post_id, $key, $single);
نکته ۴ : فیلدی که قرار است آن را ذخیره کنیم، در این مثال input اتربیوتی به نام name میگیرد که خیلی مهم است و در گام سوم برای ذخیره کردن مقدار فیلد ما مورد استفاده قرار میگیرد. در این مثال این مقدار tin_field میباشد.
مهم : مقدار key که در این مثال tin_key_field میباشد در ۲ جا استفاده میشود، زمانی که میخواهیم در گام سوم فیلد خود را ذخیره کنیم باید با key ذخیره کنیم که ما به آن مقدار tin_key_field را دادیم و دوم زمانی که میخواهیم آن را فراخوانی کنیم و مجدد در فیلد خود نمایش دهیم باید برای استفاده از get_post_meta() همین مقدار را وارد کنیم.
مشاهده کد های گام دوم
/////////////////////////////////////////////////
// ایجاد یو آی فیلد با استفاده از اج تی ام ال
/////////////////////////////////////////////////
function tin_custom_box_html($post)
{
$value = get_post_meta($post->ID, 'tin_key_field', true);
?>
<label for="tin_field">توضیحات برای این فیلد</label>
<input name="tin_field" id="tin_field" class="postbox" value="<?php echo $value; ?>">
<?php
}
در این گام کار ذخیره سازی انجام میشود، اکشن save_post زمانی که قرار است پست ما ذخیره شود فعال میشود در این زمان با استفاده از تابع update_post_meta() میتوانیم مقدار فیلد خود را نیز ذخیره کنیم.
مشاهده تابع خام update_post_meta
update_post_meta($post_id, $meta_key, $meta_value);
تابع update_post_meta سه ورودی میگیرد که به شرح ذیل است :
مشاهده کد های گام سوم
/////////////////////////////////////////////////
//ذخیره کردن فیلد
/////////////////////////////////////////////////
add_action('save_post', 'tin_save_postdata');
function tin_save_postdata($post_id)
{
if (array_key_exists('tin_field', $_POST)) {
update_post_meta(
$post_id,
'tin_key_field',
$_POST['tin_field']
);
}
}
کد هایی که در ویدیو بالا استفاده شده است به شرح ذیل است و میتوانید به راحتی آن را دانلود و استفاده نمایید.
مرحله یک : رجیستر کردن متا باکس
/////////////////////////////////////////////////
//رجیستر کردن متا باکس
/////////////////////////////////////////////////
add_action('add_meta_boxes', 'tit_add_custom_box');
function tit_add_custom_box()
{
add_meta_box(
'tit_box_id', // Unique ID
'تایتل متا باکس', // Box title
'tit_custom_box_html', // Content callback, must be of type callable
'tit_pt_Pproduct', // Post type
'side', //normal , advanced , side
'high' // default , core , high , low
);
}
مرحله دوم : ایجاد یو آی فیلد با استفاده از اج تی ام ال
/////////////////////////////////////////////////
// ایجاد یو آی فیلد با استفاده از اج تی ام ال
/////////////////////////////////////////////////
function tit_custom_box_html($post)
{
?>
<label for="tit_field_price">توضیحات برای این فیلد</label>
<input name="tit_field_price" id="tit_field_price" class="postbox" value="">
<?php
}
مرحله سوم : ذخیره کردن فیلد
/////////////////////////////////////////////////
//ذخیره کردن فیلد
/////////////////////////////////////////////////
add_action('save_post', 'tit_save_postdata');
function tit_save_postdata($post_id)
{
if (array_key_exists('tit_field_price', $_POST)) {
//add and update
$get_post_meta = get_post_meta($post_id, 'tit_key_field_price', false);
if ($get_post_meta) {
update_post_meta($post_id, 'tit_key_field_price', $_POST['tit_field_price']);
} else {
add_post_meta($post_id, 'tit_key_field_price', $_POST['tit_field_price']);
}
} else {
delete_post_meta($post_id, 'tit_key_field_price_price');
}
}
مرحله چهارم : فراخوانی مقدار فیلد در باکس
$value = get_post_meta($post->ID, 'tit_key_field_price', true);
<?php echo esc_attr($value); ?>
مرحله پنجم : امنیت، برسی نانس
برای محافظت از سایت و پلاگین در برابر حملاتی مثل جعل درخواست یا همان CSRF یا XSRF از NONCE استفاده میکنیم. نانس Token ای منحصربفرد است که از مجموعه ای از حروف و اعداد تشکیل شده، این رشته یکبار مصرف Number Used Once در سمت سرور به صورت خودکار ایجاد و به کلاینت ارسال می گردد. کلاینت هم برای انجام درخواست هایی مثل افزودن، حذف و ویرایش داده ها باید این نشانه امنیتی را به سرور برگرداند تا وردپرس مطمئن شود که درخواست های ارسالی جعلی نیستند.
<input type="hidden" value="<?php echo wp_create_nonce(plugin_basename(__FILE__)); ?>" name="tit_nonce_code" id="tit_nonce" />
//nonce check
$my_nonce = wp_verify_nonce($_POST['tit_nonce_code'], plugin_basename(__FILE__));
if (!$my_nonce) die("Security check failed => nonce error");
مرحله ششم : امنیت، برسی نقش کاربر
//check user roles
if (!current_user_can('edit_post', $post_id))
die("Security check failed => current user error");
مشاهده کامل کدها
/////////////////////////////////////////////////
//رجیستر کردن متا باکس
/////////////////////////////////////////////////
add_action('add_meta_boxes', 'tit_add_custom_box');
function tit_add_custom_box()
{
add_meta_box(
'tit_box_id', // Unique ID
'تایتل متا باکس', // Box title
'tit_custom_box_html', // Content callback, must be of type callable
'tit_pt_Pproduct', // Post type
'side', //normal , advanced , side
'high' // default , core , high , low
);
}
/////////////////////////////////////////////////
// ایجاد یو آی فیلد با استفاده از اج تی ام ال
/////////////////////////////////////////////////
function tit_custom_box_html($post)
{
$value = get_post_meta($post->ID, 'tit_key_field_price', true);
?>
<input type="hidden" value="<?php echo wp_create_nonce(plugin_basename(__FILE__)); ?>" name="tit_nonce_code" id="tit_nonce" />
<label for="tit_field_price">توضیحات برای این فیلد</label>
<input name="tit_field_price" id="tit_field_price" class="postbox" value="<?php echo esc_attr($value); ?>">
<?php
}
/////////////////////////////////////////////////
//ذخیره کردن فیلد
/////////////////////////////////////////////////
add_action('save_post', 'tit_save_postdata');
function tit_save_postdata($post_id)
{
if (array_key_exists('tit_field_price', $_POST)) {
//baresie nonce
$my_nonce = wp_verify_nonce($_POST['tit_nonce_code'], plugin_basename(__FILE__));
if (!$my_nonce) die("Security check failed => nonce error");
//baresie karbar
if (!current_user_can('edit_post', $post_id))
die("Security check failed => current user error");
//add and update
$get_post_meta = get_post_meta($post_id, 'tit_key_field_price', false);
if ($get_post_meta) {
update_post_meta($post_id, 'tit_key_field_price', $_POST['tit_field_price']);
} else {
add_post_meta($post_id, 'tit_key_field_price', $_POST['tit_field_price']);
}
} else {
delete_post_meta($post_id, 'tit_key_field_price_price');
}
}
خرید از تهران آی تی به صورت آنلاین بوده لینک دانلود به صورت خودکار برای شما ایمیل میشود بدیهی است که در هنگام خرید باید از ایمیل واقعی خود استفاده کنید. چنانچه نیاز به هرگونه سوال درباره محصول و یا مشاوره و کمک در خرید آنلاین داشتید از طریق ایمیل و یا شماره های تماس ارتباط برقرار کنید 09121486770 ahadian2@gmail.com