گرویتی فرم (Gravity Forms) ، یک افزونه ی ایجاد فرم های داینامیک در بستر وردپرس می باشد ، به شکلی که مدیران سایت وردپرس می توانند به راحتی یک فرم با فیلد های ورودی متنوع در آن ایجاد کنند و با ایجاد یک شورت کد وردپرس (WordPress Shortcode) ، در وب سایت نمایش دهند.
بسیاری از مشتریان وردپرس واقعی ، که درخواست برنامه نویسی و طراحی اپلیکیشن موبایل برای سیستم وردپرس خود را دارند ، همواره این دغدغه برایشان مطرح هست که آیا در اپلیکیشن ها هم میتوان دقیقا مشابه مدیریت وردپرس با تغییر فیلد های گرویتی فرم به صورت کاملا هوشمند اطلاعات از اپلیکیشن موبایل وردپرس فراخوانی شود یا خیر؟ چون زمانی که می خواهید در یک پلتفرم دیگر از اطلاعات وب سرویس یا REST API وردپرس استفاده کنید دیگر شورت کد ها وردپرس برای ما کاربردی ندارد.
در این مقاله سعی دارم شما را با نحوه ی داینامیک کردن فرم های افزونه ی گرویتی فرم ، و استفاده از آن در برنامه نویسی فرانت اند (FrontEnd) آشنا کنم.
بطور کلی سه بخش اساسی در هسته ی افزونه گرویتی فرم وجود دارد:
اگر با آکادمی وردپرس واقعی همراه بوده باشید ، می دانید که برای ذخیره هر نوع داده یا محتوا در وردپرس همواره دو راه کار وجود دارد:
افزونه ی گرویتی فرم بر اساس اینکه داده های غیر متمرکز را جمع آوری میکند ، مدل دوم را انتخاب نموده است. پس اگر شما افزونه ی گرویتی فرم را نصب کنید جداول زیر در پایگاه داده وردپرس در بخش (PHPMyAdmin) نمایان می شود:
جداول بانک اطلاعاتی افزونه گرویتی فرم ب توجه به تعاریف ساختاری که انجام داده ایم به دو سدته تقسیم می شود لیست فرم ها (Forms) و ورودی های کاربران (Entry).
برای ایجاد فرم های داینامیک در اپلیکیشن موبایل وردپرس می بایست دو مرحله یا Route در وب سرویس وردپرس ایجاد شود:
خوشبخانه بوسیله مستندات قدرتمند افزونه ی گرویتی فرم ما نگران راه حل های پیچیده در این زمینه نیستیم.
ابتدا یک افزونه ی جدید در وردپرس ایجاد می کنیم و نام آن را gravity-api قرار می دهیم تا بوسیله ی آن بتوانیم یک وب سرویس برای افزونه گرویتی فرم ایجاد کنیم.من وارد خط فرمان وردپرس می شوم و دستور زیر را تایپ می کنم:
$ wp scaffold plugin gravity-api --activate
اگر با تکنولوژی خط فرمان وردپرس آشنا نیستید ، پیشنهاد می کنم حتما در “دوره جامع مدیریت حرفه ای استارتاپ های وردپرس با خط فرمان و ابزار پکیج منیجر” شرکت کنید ، در این دوره شما در کنار من به یک مدیر سایت وردپرس و توسعه دهنده حرفه ای تبدیل خواهید شد.
ما نیاز به ایجاد دو مسیر جدید در وب سرویس وردپرس داریم ، ابتدا یک مسیر برای دریافت اطلاعات فرم و دیگری برای ارسال اطلاعات فرم ها به پایگاه داده. اگر با مستندات وردپرس آشنایی داشته باشید میدانید که برای ایجاد یک Custom EndPoint جدید در وب سرویس وردپرس از هوک rest_api_init استفاده می کنیم:
add_action('rest_api_init', 'create_rest_api');
function create_rest_api()
{
register_rest_route('gravity', 'form', [
'methods' => 'GET',
'callback' => [$this, 'forms'],
'args' => [
'id' => [
'required' => true
]
]
]);
register_rest_route('gravity', 'send', [
'methods' => 'POST',
'callback' => [$this, 'send'],
'args' => [
'form_id' => [
'required' => true
]
]
]);
}
زمانی که مدیر وب سایت در افزونه گرویتی فرم ، یک فرم جدید ایجاد می کند ، این فرم دارای یک شناسه ی یکتا در پایگاه داده وردپرس می باشد ، بطور مثال اگر یک فرم به نام تماس با ما ایجاد کنید در بالای صفحه مدیریت گرویتی فرم ID آن نمایش داده خواهد شد.
با فرض اینکه آدرس وب سایت شما site.com باشد ، ما برای دریافت اطلاعات و جزئیات فرم شماره یک در افزونه ی گرویتی فرم میبایست آدرس زیر را در مرورگر یا برنامه نویسی اپلیکیشن سمت وردپرس ارسال کنیم:
http://site.com/wp-json/gravity/form?id=1
در لیست داده ها که به فرمت json ارائه می شود یک کلید وجود دارد به نام fields که مشخصات کامل فیلد های گرویتی در آن واقع شده است. ما بوسیله این مشخصات مثلا نوع فیل یا Type می توانید در بستر اپلیکیشن خود این فرم را ایجاد کنیم.
برای ارسال یک Entry یا ورودی جدید به کاربران ما میبایست از شناسه های یکتای هر فیلد که در رم های گرویتی وجود دارد استفاده کنیم. اگر در محیط ویرایش یک فرم باشید باکلیک روی هر فیلد می بینید که آن فیلد نیز یک شناسه ی یکتا در وردپرس دارد:
این شناسه می تواند نقطه ی مشترک ما برای ارسال داده های کاربران سمت گرویتی فرم در REST API باشد.در مستندات گرویتی فرم یک تابع وجود دارد به نام add_entry که توسط آن میتوانید بر اساس شناسه فیلد های یکتا داده ها را براحتی ارسال کنید پس من در افزونه وردپرس تنها کافیست که ورودی کاربر را دریافت کنم و به تابع add_entry ارسال کنم:
public function send(WP_REST_Request $request)
{
$entry_id = GFAPI::add_entry($request->get_params());
return new WP_REST_Response([
'success' => true,
'entry_id' => $entry_id
], 200);
}
فرم ها یا ورودی ها از جمله حساس ترین اطلاعات کاربران در هر پلتفرم وردپرس می باشد. پس حتما میبایست سعی شود تمامی ورودی ها از همه لحاظ اعتبار سنجی یا Validation شود. به عنوان مثال اگر در حال برنامه نویسی یک فرم برای پنل کاربری وردپرس هستید، حتما قبل از آن اعتبار سنجی انجام دهید که کاربر لاگین هست یا خیر؟ این روش را میتوانید از طریق سرویس Auth مثل JWT و .. براحتی پیاده سازی کنید.
نکته ی بعدی میزان حجم داده های Response بین اپلیکشن و وب سایت وردپرسی شما می باشد. یکی از مواردی که باعث کاهش سرعت وب سایت های وردپرسی می شود دریافت و ارسال داده هایی که به هیچ عنوان برای ما قابل استفاده نیستند.
مثلا برای دریافت نام و نام خانوادگی یک کاربر ، نیازی نیست که تمامی داده ها از دیتابیس صدا زده شوند برای دستیابی به یک نوع داده ی خاص. این مورد مخصوصا در وردپرس زیاد بین دانشجوهای من به چشم می خورد علت عمده ی آن امر هم این است که تقریبا اکثر توابع پایه هسته ی وردپرس بر روی کلیات هست و ن جزئیات.و این فقط به میزان توانایی ، سواد و تسلط شما به مستندات وردپرس بر میگردد و هی راه میانبری برای آن نیست.
پاسخ قاطع به این سوال این است که “هیچ کدام برتری نسبت به بکدیگر ندارد”
ما ابتدا بستر REST API را به سبک WordPress Headless مهیا می کنیم.سپس شما میتوانید در بخش فرانت اند ، از هر نوع زبان برنامه نویسی که در آن تسلط دارید استفاده کنید. من نمونه مثال ایجاد اپلیکیشن همین مقاله را بر اساس زبان جاوا اسکریپت و فریم ورک vueJs برایتان آماده کرده ام که میتوانید دریافت کنید.
جهت سفارش برنامه نویسی اپلیکیشن موبایل یا نرم افزار دسکتاپ بر بستر وردپرس میتوانید از طریق فرم سفارش پروژه وردپرس با تیم وردپرس واقعی در ارتباط باشید.
همان طور که می دانید افزونه ووکامرس درنسخه های اخیر یک تغییر عمده در سفارشات…
در زمان تهیه افزونه های وردپرس برای اتصال نرم افزار حسابداری به سیستم فروشگاهی ووکامرس…
بالاخره در نسخه ی وردپرس 7.0 سرویس اتصال به سرویس هی خارجی مانند هوش مصنوعی…
تا به حال شده با دلنگرانی در داشبورد سایت وردپرسیتان بنشینید، چون بخشی از سایت…
شاید شما هم این صحنه را دیده باشید که تیم محتوا با شوق فراوان مقالهای…
صبح زود از خواب بیدار میشوید، قهوهتان را برمیدارید و مثل همیشه سری به سرچ…