برنامه نویسی قالب وردپرس (WordPress Theme Development) یکی از روش های مرسوم برای توسعه ی سایت ها و استارتاپ های تحت وردپرس هست.اگر رویکرد ساختار MVC را در وردپرس در نظر بگیریم یکی از پایه های اساسی این طرح یعنی بخش view در هسته ی وردپرس بر دوش قالب وردپرس می باشد.

یکی از مهارت هایی که می بایست هر توسعه دهنده وردپرس به آن توجه کند میزان مقیاس پذیری استارتاپ در ابعاد بزرگ هست.مسلما استارتاپ هایی که بر بستر وردپرس هستند و کم کم بزرگ تر می شوند میبایست یک استاندارد سازی و همسان سازی جامع ، در بحث توسعه ی آن ها شکل بگیرد تا در آینده دچار مشکل نشوند.

در این مقاله سعی دارم به شما بیاموزم ، چگونه میتوان یک سیستم وردپرس را برای پلتفرم های مختلف به بهینه ترین روش، یکسان سازی کرد.

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

به جرات میتوان گفت اکثریت قالب های وردپرس که در مارکت وجود دارند برای وب سایت های بزرگ وردپرسی ایجاد نشده اند. علت آن هم ناتوانی در همبستگی بین پلتفرم های مختلف می باشد.زمانی که شما برنامه نویسی قالب وردپرس انجام می دهید، بدون توجه به پیچیدگی ساختار ها مثل REST API وردپرس ، لایه بندی سیستم کش وردپرس سعی در ایجاد کوئری ها و نمایش اطلاعات دارید.

دو روش مرسوم برای برنامه نویسی قالب وردپرس وجود دارد:

استفاده از توابع داخلی وردپرس یا Template Functions:

این دقیقا همان روش قدیمی هست که توسعه دهندگان و برنامه نویسان 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;

مشکلات برنامه نویسی قالب وردپرس بر اساس Template Function:

اولین مشکل عدم هماهنگی بین مستندات و خروجی داده ها در وردپرس هست. برنامه نویس قالب وردپرس از این تابع برای دریافت لیست افراد استفاده می کند.کلاس WP_Query بر اساس یک ساختار مشخصی داده ها را نمایش می دهد.
حال توسعه دهنده دیگری برای بخش اپلیکیشن یا وب سرویس همان وب سایت وردپرسی ، در نظر دارد ساختار بهتری در خروجی خود پیاده سازی کند.آیا به نظر شما بهتر نیست برای نظم دادن به Document هر دو از یک منبع، اطلاعات را دریافت کنند؟

مشکل دوم ساختار لایه بندی کش در وردپرس (WordPress Cache) می باشد. اگر روش بالا را مبنا قرار دهیم وردپرس یک بار مجبور هست داده های WP_Query را کش کند و یک بار مجبور هست برای REST API و تقاضای دیگر داده هایی را ذخیره کند.عملا ن تنها پروسس های ما سمت CPU هاست وردپرس چندین برابر شد بلکه محل ذخیره ی داده ها نیز افزایش پیدا کرد.در صورتی که هم در قالب وردپرس و هم در پلتفرم های دیگر ما تنها به یک داده نیاز داریم.

مشکل سوم زیاد شدن تعداد خطوط برنامه نویسی و توسعه وب سایت وردپرس می باشد. شما عملا از هر تابع چندین بار در فایل ها کپی می کنید و این کار در هیچ زبان برنامه نویسی استاندارد نیست.

روش استاندارد برنامه نویسی قالب وردپرس بر اساس REST API وردپرس

در این روش تمامی درخواست های ما در زبان 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 وردپرس انجام شود ، سپس بخش های مختلف مانند قالب وردپرس ، اپلیکیشن و .. از یک منبع تغذیه شوند این کار معجزه ای در سرعت توسعه وردپرس دارد.

جهت سفارش برنامه نویسی سایت ، اپلیکیشن موبایل یا نرم افزار دسکتاپ بر بستر وردپرس میتوانید از طریق فرم سفارش پروژه وردپرس با تیم وردپرس واقعی در ارتباط باشید.

مطلب رو به اشتراک بگذارید
۲دیدگاه
در بحث‌‌ پیرامون این مقاله شرکت کنید!
ارسال دیدگاه
  • احسان فراهانی

    احسان فراهانی

    دوشنبه 24 آبان 1400 6:53 ب.ظ

    ممنون مهندس بسیار عالی بود

  • avatar

    مهران

    چهارشنبه 10 آذر 1400 2:58 ب.ظ

    واقعا مفید بود. تشکر

آکادمی وردپرس واقعی

دوره جامع مدیریت حرفه ای استارتاپ های وردپرس با خط فرمان و ابزار پکیج منیجر

در دوره جامع WP-CLI یاد خواهید گرفت، به شکل کاملا حرفه ای و با سرعت بیش تر یک یا چند وب سایت وردپرسی خود را مدیریت کنید.عملیات تکراری در مدیریت وردپرس را برای کاهش هدر رفت زمان خود سیستم سازی کنید. وردپرس شما در حین کار با خط فرمان فشار کم تری به سرور ایجاد می کند و این رویکرد می تواند وب سایت شما را بدون نقص و با سرعت عالی ارائه دهد
  • محتوای آموزشی: ۴۶ جلسه آموزشی شامل ۱۶ ساعت ویدیو آموزشی به همراه تمرینات و فایل PDF خلاصه محتوا
  • پروژه عملی دوره: نصب و مدیریت کامل بخش های یک استارتاپ وردپرس در هاست
  • کلاس رفع اشکال: کلاس آنلاین ۳۰ دقیقه ای در پایان دوره به صورت کاملا خصوصی با استاد درزی برای تثبیت محتوا و رفع اشکالات دانشجو
۱,۳۵۰,۰۰۰ تومان
سرویس ها و خدمات وردپرس

اتصال پنل فروشندگان دیجی کالا به افزونه فروشگاه ساز ووکامرس

اتصال و هماهنگی بخش محصولات ، و سفارشات پنل فروشندگان دیجی کالا با افزونه فروشگاه ساز ووکامرس ، همراه با قابلیت بروزرسانی هماهنگ موجودی ها و قیمت های محصول و مدیریت لیست سفارشات دیجی کالا در مدیریت وردپرس
۶۰۰,۰۰۰ ۳۹۷,۰۰۰ تومان

اتصال نرم افزار حسابداری هلو به افزونه فروشگاه ساز ووکامرس

اتصال دو طرفه بخش انبارداری یا محصولات ، مشتریان و فاکتور های نرم افزار حسابداری هلو با افزونه فروشگاه ساز ووکامرس ، همراه با قابلیت بروزرسانی هماهنگ موجودی ها و قیمت های محصول ، ایجاد فاکتور های اتوماتیک به نام مشتریان وردپرس در نرم افزار حسابداری
۱,۰۰۰,۰۰۰ ۶۹۷,۰۰۰ تومان

اتصال استاندارد رسانه های وردپرس ، فایل های ووکامرس و EDD به هاست دانلود

افزایش هشتاد درصدی سرعت وب سایت های وردپرس با اتصال تصاویر ، ویدیو ، صوت و فایل های فروشگاه ووکامرس و Easy Digital Downloads به هاست دانلود با قابلیت تغییر لینک اتوماتیک رسانه ها در محتوا و محافظ از سرقت فایل فروشی
۸۰۰,۰۰۰ ۴۹۸,۰۰۰ تومان