برنامه نویسی قالب وردپرس (WordPress Theme Development) یکی از روش های مرسوم برای توسعه ی سایت ها و استارتاپ های تحت وردپرس هست.اگر رویکرد ساختار MVC را در وردپرس در نظر بگیریم یکی از پایه های اساسی این طرح یعنی بخش view در هسته ی وردپرس بر دوش قالب وردپرس می باشد.
یکی از مهارت هایی که می بایست هر توسعه دهنده وردپرس به آن توجه کند میزان مقیاس پذیری استارتاپ در ابعاد بزرگ هست.مسلما استارتاپ هایی که بر بستر وردپرس هستند و کم کم بزرگ تر می شوند میبایست یک استاندارد سازی و همسان سازی جامع ، در بحث توسعه ی آن ها شکل بگیرد تا در آینده دچار مشکل نشوند.
در این مقاله سعی دارم به شما بیاموزم ، چگونه میتوان یک سیستم وردپرس را برای پلتفرم های مختلف به بهینه ترین روش، یکسان سازی کرد.
به جرات میتوان گفت اکثریت قالب های وردپرس که در مارکت وجود دارند برای وب سایت های بزرگ وردپرسی ایجاد نشده اند. علت آن هم ناتوانی در همبستگی بین پلتفرم های مختلف می باشد.زمانی که شما برنامه نویسی قالب وردپرس انجام می دهید، بدون توجه به پیچیدگی ساختار ها مثل REST API وردپرس ، لایه بندی سیستم کش وردپرس سعی در ایجاد کوئری ها و نمایش اطلاعات دارید.
دو روش مرسوم برای برنامه نویسی قالب وردپرس وجود دارد:
این دقیقا همان روش قدیمی هست که توسعه دهندگان و برنامه نویسان WordPress انجام می دهند. در این روش مثلا برای دریافت لیست آخرین مقالات در سایت با زدن یک کوئری از طریق کلاس WP_Query داده از بانک اطلاعاتی وردپرس فراخوانی می شود و برای کاربر به نمایش در می آید.
حتما بخوانید : سرعت پایین وردپرس به دلیل استفاده مستقیم از WP_Query در قالب است !
مثلا فرض کنید اگر یک PostType در وردپرس به نام person داشته باشیم و بخواهیم لیست این افراد را به ترتیب سن ، در وب سایت نمایش دهیم خواهیم داشت:
$query = new \WP_Query([
'post_type' => 'person',
'meta_key' => 'age',
'orderby' => 'meta_value_num',
'meta_type' => 'NUMERIC',
'order' => 'DESC',
]);
return $query->posts;
اولین مشکل عدم هماهنگی بین مستندات و خروجی داده ها در وردپرس هست. برنامه نویس قالب وردپرس از این تابع برای دریافت لیست افراد استفاده می کند.کلاس WP_Query بر اساس یک ساختار مشخصی داده ها را نمایش می دهد.
حال توسعه دهنده دیگری برای بخش اپلیکیشن یا وب سرویس همان وب سایت وردپرسی ، در نظر دارد ساختار بهتری در خروجی خود پیاده سازی کند.آیا به نظر شما بهتر نیست برای نظم دادن به Document هر دو از یک منبع، اطلاعات را دریافت کنند؟
مشکل دوم ساختار لایه بندی کش در وردپرس (WordPress Cache) می باشد. اگر روش بالا را مبنا قرار دهیم وردپرس یک بار مجبور هست داده های WP_Query را کش کند و یک بار مجبور هست برای REST API و تقاضای دیگر داده هایی را ذخیره کند.عملا ن تنها پروسس های ما سمت CPU هاست وردپرس چندین برابر شد بلکه محل ذخیره ی داده ها نیز افزایش پیدا کرد.در صورتی که هم در قالب وردپرس و هم در پلتفرم های دیگر ما تنها به یک داده نیاز داریم.
مشکل سوم زیاد شدن تعداد خطوط برنامه نویسی و توسعه وب سایت وردپرس می باشد. شما عملا از هر تابع چندین بار در فایل ها کپی می کنید و این کار در هیچ زبان برنامه نویسی استاندارد نیست.
در این روش تمامی درخواست های ما در زبان PHP بر اساس وب سرویس یا REST API در وردپرس انجام می شود.سپس در زمان برنامه نویسی قالب وردپرس تنها کافیست که به صورت Internally اطلاعات از وردپرس دریافت شود.یعنی قالب وردپرس خودش یک یوزر برای دریافت اطلاعات از REST API تعریف می شود.
بیایید مثال دریافت لیست افراد بر اساس سن را به صورت استاندارد در وردپرس برنامه نویسی کنیم.
ابتدا توسط خط فرمان وردپرس یک افزونه ایجاد می کنیم:
$ wp scaffold plugin wp-api
سپس برای تعریف کردن یک پست تایپ در وردپرس میتوانیم از دستور زیر در WP-CLI استفاده کنیم:
$ wp scaffold post-type person --plugin=wp-api
در دستور بالا یک پست تایپ جدید با اسلاگ person در وردپرس ایجاد می شود که فایل PHP آن در افزونه wp-api ما قرار خواهد گرفت.
برای ایجاد یک مسیر جدید در REST API وردپرس از هوک وردپرس rest_api_init و تابع register_rest_route استفاده می کنیم:
add_action('rest_api_init', 'create_rest_api');
function create_rest_api()
{
register_rest_route('persons', 'list', [
'methods' => 'GET',
'callback' => 'get_list_person'
]);
}
حال در تابع دریافت لیست اشخاص وردپرس ، دقیقا همان WP_Query را استفاده خواهیم کرد:
function get_list_person(WP_REST_Request $request){
$Query = new \WP_Query([
'post_type' => 'person',
'meta_key' => 'age',
'orderby' => 'meta_value_num',
'meta_type' => 'NUMERIC',
'order' => 'DESC',
]);
return new WP_REST_Response([
'list' => $Query->posts
], 200);
}
توسط دستور بالا ما یک مسیر جدید در REST API وردپرس برای نمایش لیست افراد ایجاد کردیم، با فرض اینکه نام دامنه ی ما site.com باشد ، الان این API در آدرس زیر در دسترس می باشد:
https://site.com/wp-json/persons/list
تا اینجا مشکل برای برنامه نویسی Front-End حل شده و می توانیم از این داده در اپلیکیشن یا بستر های دیگر استفاده کنیم.برای استفاده از خروجی این API در Theme وردپرس از متد rest_do_request در برنامه نویسی قالب وردپرس استفاده می کنیم.
توجه کنید استفاده از روش درخواست های داخلی REST API وردپرس ، بدین معنا نیست که مجدد درخواست دیگری سمت سرور وردپرس ارسال می شود. بلکه این تابع کاملا داخلی می باشد و در PHP پردازش صورت میگیرد.
$request = new WP_REST_Request('GET', '/persons/list');
$response = rest_do_request($request);
$data = $response->get_data();
در کد بالا ما توانستیم یک Internally API برای دریافت لیست افراد در PHP ایجاد کنیم. براحتی میتوانید بر اساس کلاس WP_REST_Request برای تمامی بخش ها در برنامه نویسی قالب وردپرس یک درخواست به REST API بزنید و اطلاعات را دریافت یا ارسال کنید.
برای ارسال پارامترهای دلخواه در زمان دریافت یا ارسال اطلاعات نیز میتواند از متد set_query_params استفاده کنید:
$request = new WP_REST_Request('GET', '/persons/list');
$request->set_query_params(['posts_per_page' => 8]);
برای مدیریت خطاها و دریافت Status از REST API نیز می توانید از تابع is_error که یک آبجکت از کلاس اصلی مدیریت خطاها یا WP_Error استفاده کنید.فرض کنید می خواهیم اطلاعات یک کاربر را برای فرم تماس با ما ارسال کنیم ابتدا میبایست بررسی شود اگر خطایی وجود داشت به کاربر نمایش داده شود:
$request = new WP_REST_Request('POST', '/contact-form');
$request->set_body_params([
'name' => 'Mehrshad Darzi',
'phone' => '0912xxxxx',
'text' => 'Hello'
]);
$response = rest_do_request($request);
if ( $response->is_error() ) {
# Convert to a WP_Error object.
$error = $response->as_error();
$message = $response->get_error_message();
$error_data = $response->get_error_data();
$status = isset( $error_data['status'] ) ? $error_data['status'] : 500;
wp_die( printf( '<p>An error occurred: %s (%d)</p>', $message, $error_data ) );
}
# Get Data if Send Form Success
$data = $response->get_data();
$headers = $response->get_headers();
echo $data;
در حال حاضر استاندارد ترین شیوه برای توسعه ی استارتاپ های وردپرسی این است که ابتدا تمامی برنامه نویسی های PHP با مکانیزم WordPress Headless بر پایه ی REST API وردپرس انجام شود ، سپس بخش های مختلف مانند قالب وردپرس ، اپلیکیشن و .. از یک منبع تغذیه شوند این کار معجزه ای در سرعت توسعه وردپرس دارد.
جهت سفارش برنامه نویسی سایت ، اپلیکیشن موبایل یا نرم افزار دسکتاپ بر بستر وردپرس میتوانید از طریق فرم سفارش پروژه وردپرس با تیم وردپرس واقعی در ارتباط باشید.
همان طور که می دانید افزونه ووکامرس درنسخه های اخیر یک تغییر عمده در سفارشات…
در زمان تهیه افزونه های وردپرس برای اتصال نرم افزار حسابداری به سیستم فروشگاهی ووکامرس…
بالاخره در نسخه ی وردپرس 7.0 سرویس اتصال به سرویس هی خارجی مانند هوش مصنوعی…
تا به حال شده با دلنگرانی در داشبورد سایت وردپرسیتان بنشینید، چون بخشی از سایت…
شاید شما هم این صحنه را دیده باشید که تیم محتوا با شوق فراوان مقالهای…
صبح زود از خواب بیدار میشوید، قهوهتان را برمیدارید و مثل همیشه سری به سرچ…