آموزش کار با PHP سمت سرور و Enqueue در وردپرس

///آموزش کار با PHP سمت سرور و Enqueue در وردپرس

آموزش کار با PHP سمت سرور و Enqueue در وردپرس

سایر بخش های سری آموزشی " ایجاد افزونه وردپرس "

برای پیاده سازی ارتباط AJAX ما به دو قسمت اسکریپت PHP سمت سرور نیاز داریم. ابتدا لازم است که اسکریپت های جی کوئری را در صفحه وارد کنیم و هر نوع مقدار PHP را که اسکریپت جی کوئری نیاز دارد را مشخص کنیم. قسمت دوم مدیریت کننده درخواست های ای جکس است.

Enqueue

باتوجه به اینکه شما به عنوان یک طراح افزونه به فایل سربرگ دسترسی ندارید و نمی توانید فایل های مورد نیاز افزونه را به صورت مستقیم وارد کنید، می توانید با استفاده از تابع wp_enqueue_script این کار را انجام دهید.

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

پارامتر اول یک برچسب دلخواه برای اشاره به اسکریپت است.

پارامتر دوم آدرس کامل فایل اسکریپت است که البته برای این مورد از plugins_url استفاده می شود.

در نهایت پارامتر سوم آرایه ای است که اسکریپت های وابسته را می توانید مشخص کنید.

باتوجه به اینکه ما با استفاده از جی کوئری و ای جکس درخواست های خود را ارسال می کنیم از ‘jquery’ برای پارامتر سوم استفاده می کنیم. هرچند در اینجا ما تنها یک مقدار داریم، اما توصیه می شود که حتما همیشه از آرایه استفاده کنید.

به کدهای این قسمت توجه کنید:

wp_enqueue_script( 'ajax-script',
    plugins_url( '/js/myjquery.js', __FILE__ ),
    array('jquery')
);

البته دستور enqueue خود نیز به سه حالت تقسیم بندی می شود:

  1. admin_enqueue_scripts – جهت درج اسکریپت ها برای صفحات مدیریت
  2. wp_enqueue_scripts – جهت درج اسکریپت ها در صفحات سایت
  3. login_enqueue_scripts – جهت درج اسکریپت ها تنها برای صفحه ورود

برای اینکه مطمئن شوید که فایل را تنها در مکان مورد نیاز استفاده کرده اید، می توانید به کد تکمیل شده زیر نگاه کنید:

add_action( 'admin_enqueue_scripts', 'my_enqueue' );
function my_enqueue( $hook ) {
    if( 'myplugin_settings.php' != $hook ) return;
    wp_enqueue_script( 'ajax-script',
        plugins_url( '/js/myjquery.js', __FILE__ ),
        array( 'jquery' )
    );
}

Nonce

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

نحوه ایجاد nonce به صورت زیر است:

$title_nonce = wp_create_nonce( 'title_example' );

پارامتر title_example می تواند هر کاراکتر دلخواهی باشد. پیشنهاد که می شود آن را مرتبط با nonce که می خواهید انتخاب کنید، اما با این حال می توانید هر نامی را برای آن انتخاب کنید.

AJAX

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

از آنجا که تغییرات ای جکس مثال ما مربوط به صفحه تنظیمات افزونه است، کاربر باید حتما وارد شده باشد. به همین دلیل مقدار “my_tag_count” که در مثال جلسه قبل گفته شده بود در هوک اکشن باید به صورت wp_ajax_my_tag_count استفاده شود.

کد هوک اکشن به صورت زیر خواهد بود:

add_action( 'wp_ajax_my_tag_count', 'my_ajax_handler' );
function my_ajax_handler() {
    // Handle the ajax request
    wp_die(); // All ajax handlers die when finished
}

اولین کاری که مدیریت کننده ای جکس باید انجام دهد، بررسی nonce ارسال شده توسط جی کوئری با استفاده از تابع check_ajax_referer() می باشد.

بدین منظور از این کد استفاده می شود:

check_ajax_referer( 'title_example' );

مقدار پارامتر این تابع باید همان مقداری که در پیش از این در تابع wp_create_nonce() استفاده کرده بودیم باشد.

داده Data

پس از اینکه صحت درخواست توسط nonce مشخص شد، اسکریپت ما می تواند کار خود را با داده های دریافتی انجام دهد.

به عبارتی با استفاده از تابع update_user_meta() می توانیم انتخاب کاربر را در متای کاربر ذخیره کنیم.

به کدهای زیر نگاه کنید:

update_user_meta( get_current_user_id(), 'title_preference', $_POST

[‘title’]);

سپس یک کوئری ایجاد می کنیم تا تعداد نوشته ها برای عنوان انتخاب شده را بدست آورد.

$args = array(
    'tag' => $_POST['title'],
);
$the_query = new WP_Query( $args );

در نهایت می توانیم پاسخ را به اسکریپت جی کوئری ارسال کنیم. برای انتقال این داده ها چندین روش وجود دارد. قبل از اینکه به جزئیات بیشتر مثال بپردازیم چند مورد از این انتخاب ها را بررسی می کنیم.

XML

پی اچ پی از XML پشتیبانی می کند و در وردپرس خوشبختانه به لطف وجود کلاس WP_Ajax_Response می توان از این ساختار به راحتی استفاده کرد. در واقع کلاس WP_Ajax_Response پاسخ هایی با فرمت XML تولید می کند، سربرگ محتوا را به درستی تنظیم کرده و خروجی پاسخ را به صورت XML ارائه کرده و سپس جهت اطمینان از پاسخ XML مناسب از بین می رود.

JSON

این فرمت سبک تر بوده و استفاده از آن نیز راحت تر می باشد. برای استفاده از این فرمت در وردپرس از کلاس wp_send_json استفاده می شود. در کنار این کلاس وردپرس توابع wp_send_json_success و wp_send_json_error را نیز فراهم کرده است که مقدار done() و fail() را باز می گردانند.

دیگر

شما می توانید داده ها را به هر شکلی که می خواهید منتقل کنید، مسئله مهم دریافت پاسخ توسط درخواست کننده است.

برای مثال به کد زیر نگاه کنید:

echo $_POST['title'].' ('.$the_query->post_count.') ';

Die

زمانی که مدیریت کننده درخواست ها کار خود را به اتمام رساند، لازم است که آن را از بین برد. اگر از کلاس WP_Ajax_Response و یا wp_send_json استفاده کنید، این کار به صورت خودکار توسط کلاس ها صورت خواهد گرفت اما اگر از حالت های دیگر استفاده کنید، آن موقع باید خودتان از تابع wp_die() استفاده کنید.

مدیریت کننده Ajax

کد تکمیل شده مثال به صورت زیر می باشد:

//JSON
function my_ajax_handler() {
    check_ajax_referer( 'title_example' );
    update_user_meta( get_current_user_id(), 'title_preference', $_POST['title'] );
    $args = array(
        'tag' => $_POST['title'],
    );
    $the_query = new WP_Query( $args );
        wp_send_json( $_POST['title'] . ' (' . $the_query->post_count . ') ' );
}
//Other
function my_ajax_handler() {
    check_ajax_referer( 'title_example' );
    update_user_meta( get_current_user_id(), 'title_preference', $_POST['title'] );
    $args = array(
        'tag' => $_POST['title'],
    );
    $the_query = new WP_Query( $args );
    echo $_POST['title'].' ('.$the_query->post_count.') ';
    wp_die(); // All ajax handlers should die when finished
}
نویسنده: |۱۳۹۵/۵/۲۳ ۹:۵۷:۳۲۲۳ مرداد ۱۳۹۵|ساخت افزونه وردپرس, سری آموزشی|فاقد دیدگاه

درباره نویسنده:

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

نظر شما چیست