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

با پیشرفت نرم افزار های حسابداری امکاناتی چون سرویس های REST API در آن ها کاملا ایجاد شده است. در بستر وب سرویس های نرم افزار حسابداری ما قابلیت نمایش لیست کالا ها به همراه موجودی در انبار یا قیمت روز هر محصول راخواهیم داشت.
همان طور که می دانید افزونه ووکامرس (WooCommerce) در وردپرس یکی از برترین فروشگاه ساز های اینترنتی محسوب می شود. از این رو اتصال نرم افزار حسابداری به ووکامرس می تواند بسیار مفید برای کسب و کارهای اینترنتی باشد.

روزانه تماس ها زیادی به بنده می شود مبنی بر اینکه شرکت ما یک سیستم انبار داری و نرم افزار حسابداری دارد که قیمت و موجودی کالا ها تماما در آن وجود دارد و می خواهند آن را کاملا هماهنگ با افزونه ووکامرس در وردپرس کنند تا از شر داستان تغییر قیمت ها و موجودی ها کاملا خلاص شوند. مخصوصا زمانی که محصولات در افزونه ووکامرس بسیار زیاد باشد و آن وقت ویرایش هر محصول زمان زیادی از وب مستر ها می گیرد.

 

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

 

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

  1. اصولا نرم افزار حسابداری در شرکت ها بر روی یک سیستم نصب هست . نیاز اولیه ما قابلیت اتصال این کامپیوتر به اینترنت هست. زیرا سایت های وردپرس در بستر وب قرار دارند و حتما برای برقراری ارتباط با نرم افزار حسابداری نیازمند آن هستند که آن سیستم ها نیز در بستر اینترنت وجود داشته باشند.
  2. اصولا در ایران آی پی های اینترنت به صورت دوره ای تغییر می کنند ، شما نیاز دارید که یک آی پی اختصاصی از سرویس اینترنت خود خریداری کنید تا افزنه ووکامرس بتواند همیشه به صورت مشخص اطلاعات را از روی یک آی پی بخواند.
  3. قابلیت API در نرم افزار حسابداری به گونه ای باشد که بتوان بر اساس شناسه یک کالا اطلاعات جامع آن را بدست آورد. مثلا بسیاری از نرم افزار های حسابداری را شخصا دیده ام که برای گرفتن موجودی باید یک درخواست بزنیم ، برای قیمت یک درخواست دیگر و همین طور. در این حالت فرض کنید چقدر میزان درخواست های به سرور زیاد می شود. سعی شود این الگو ها در زمان خرید نرم افزار حسابداری حتما مورد توجه شما باشد.

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

برای شروع یک افزونه در وردپرس به نام wp-woocommerce-accounting ، با نوشتن دستور زیر در خط فرمان وردپرس (WP-CLI) ایجاد می کنیم :

wp scaffold plugin wp-woocommerce-accounting

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

نقطه ی مشترک بروز رسانی محصول از طریق اتصال نرم افزار حسابداری به ووکامرس چیست ؟

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

 

شناسه محصول در ووکامرس

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

همان طور که می دانید هر یک از محصولات ووکامرس در جدول پست با پست تایپ مقدار product واقع شده است.شناسه محصول نیز در بانک اطلاعاتی وردپرس با پست متای sku_ برای پست قرار دارد.از این رو اگر بخواهیم یک محصول را بر اساس شناسه کالا در سیستم وردپرس خود جستجو کنیم می توانیم از تابع wc_get_product_id_by_sku در ووکامرس بهره بگیریم.
با فرض اینکه محصولی در ووکامرس وجود داشته باشد با شناسه 68952 و بخواهیم قیمت فروش آن را در سایت نشان دهیم خواهیم داشت :

$sku = 68952;
$product_id = wc_get_product_id_by_sku($sku);
if ($product_id >0) {

    // Get Product By ID in WooCommerce
    $product = wc_get_product( $product_id );
    echo $product->get_price();
}

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

ویرایش قیمت و موجودی کالا در ووکامرس

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

موجودی کالا در ووکامرس

موجودی کالا در بانک اطلاعاتی ووکامرس دارای 3 شناسه اصلی می باشد:

  1. شناسه پست متا stock_ که عدد موجودی کالا را در بانک اطلاعاتی قرار می دهد.
  2. شناسه پست متا stock_status_ که وضعیت موجودی را مشخص می کند دارای دو مقدار ثابت instock یعنی در حال فروش و وجود داشتن موجودی و مقدار دیگر outofstock که به معنای اتمام موجودی و غیر قابل فروش بودن هست. البته خوده سیستم ووکامرس آن قدر هوشمند هست ، وقتی شما موجودی را برابر با صفر کنید خود به خود آن را غیر قابل فروش کند.
  3. اگر محصولات شما قابلیت پیش فروش در وب سایت را ندارند پس حتما می بایست امکان پیش فروش برای آن ها غیر فعال شود. برای این کار ووکامرس از شناسه پست متا backorders_ استفاده کرده که دو مقدار yes و no را به خود میگیرد.

قیمت کالا در ووکامرس

در هنگام اتصال نرم افزار حسابداری به ووکامرس می بایست به قیمت ها بسیار دقت کرد. در حالت عادی در ووکامرس دو نوع قیمت گذاری وجود دارد:

  1. حالت اول زمانی هست که قیمت کالا مقطوع بوده و تک نرخی می باشد در این حالت قیمت محصول را عموما regular_price نام گذاری می کنند.
  2. حالت دوم زمانی هست که قیمت با تخفیف وجود دارد و به اصطلاح دو قیمتی می باشد که در این مواقع قیمت با تخفیف با شناسه sale_price و قیمت اصلی محصول با شناسه regular_price نام گذاری شده است در جدول PostMeta سیستم وردپرس.

حال که با تئوری قیمت و موجودی کالا در ووکامرس آشنا شدید ، برای تغییر قیمت و موجودی کالا با شناسه 68952 در ووکامرس خواهیم داشت:

// Product Information
$sku = 68952;
$regular_price = 22000;
$sale_price = 15000;
$quantity = 0;

// Search Product By SKU
$product_id = wc_get_product_id_by_sku($sku);
if ($product_id > 0) {

    // Get Product By ID in WooCommerce
    $product = new WC_Product($product_id);

    // Set product stock quantity
    $product->set_stock_quantity($quantity);
    if ($quantity == 0) {
        $product->set_stock_status('outofstock');
    } else {
        $product->set_stock_status('instock');
    }
    
    // Set Product Price
    if ($regular_price == $sale_price) {
        $product->set_price($regular_price);
    } else {
        $product->set_regular_price($regular_price);
        $product->set_sale_price($sale_price);
    }

    // Save Product
    $product->save();
}

فرض کنید در نرم افزار حسابداری شما یک کالا با شناسه 68952  وجود داشت که نرخ اصلی آن 22000 و نرخ با تخفیف آن 15000 تومان و موجودی کالا در نرم افزار حسابداری صفر می باشد. برای بروز رسانی این مقدار در افزونه ووکامرس توسط کلاس WC_Product این کار را انجام می دهیم.

توجه : دقت کنید که گاها نرخ محصولات در نرم افزار های حسابداری بر اساس ریال می باشد. ولی قیمت ها داخل وب سایت وردپرس ما بر اساس تومان تنظیم شده است. در این جالت حتما می بایست با تقسیم کردن اعداد بر ده قیمت را از ریال به تومان تبدیل کنید.

دریافت اطلاعات محصول از نرم افزار حسابداری در هسته ی وردپرس

در هسته ی وردپرس مجموع توابعی وجود دارد به نام HTTP API که امکان برقراری ارتباط با وب سرویس ها و API های دیگر را فراهم می کند. اگر بخواهیم دو مورد از معروف ترین این تابع ها را نام ببریم:

  1. تابع wp_remote_get برای ارسال درخواست ها از نوع GET در وردپرس.
  2. تابع wp_remote_post برای ارسال درخواست ها از نوع POST در هسته ی وردپرس.

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

من در مثال زیر یک نمونه کد دریافت اطلاعات یک محصول با شناسه 3569 از نرم افزار حسابداری هلو را در وردپرس بیان می کنم :

// Get Product Data From Accounting Software API
$sku = '3569';
$url = 'http://{server-ip}:8080/TncHoloo/api/Product?code='.$sku;
$token = 'xxxxx';

// Send Request To API
$request = wp_remote_get($url, array(
    'headers' => array('Content-Type' => 'application/json; charset=utf-8'),
    'timeout' => 120,
    'body' => array(),
    'method' => 'GET',
    'headers' => array(
        'Authorization' => $token,
    )
));

// Check Connect Error
if (is_wp_error($request)) {
    return false;
}

// Get Body Of Request
$body = wp_remote_retrieve_body($request);
$array = json_decode($body, true);

// Return Data
return $array;

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

نقطه ی جدب یا تغییر اطلاعات محصول در ووکامرس

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

حال سوال اینجاست در چه زمانی می بایست دستورات ما شروع به اجرا کردن کنند تا روند کاملا اتوماتیک باشد ؟ این کار را هم می توان توسط سیستم Cron و زمان بندی وردپرس انجام داد و هم می توان توسط هوک های وردپرس در زمان نقطه ی جذب شروع به اجرا شدن کرد.

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

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

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

من در زیر 4 نمونه از هوک های ووکامرس را بیان می کنم. البته هوک های بسیار زیادی در ووکامرس وجود دارد که محدود به چهار مورد زیر تنها نیست.

هوک در زمان بروز رسانی محصول ووکامرس

add_action('woocommerce_update_product', 'sync_on_product_save', 10, 1);
function sync_on_product_save($product_id)
{
    // Check Product has _SKU
    $sku = get_post_meta($product_id, '_sku', true);
    if (!empty($sku)) {
        // Connect To API
        // Update in WooCommerce
    }
}

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

add_filter('woocommerce_product_type_query', 'before_get_product_type', 10, 2);
function before_get_product_type($override, $product_id)
{
    // Check Product has _SKU
    $sku = get_post_meta($product_id, '_sku', true);
    if (!empty($sku)) {
        // Connect To API
        // Update in WooCommerce
    }

    return false;
}

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

add_filter('woocommerce_add_to_cart_validation', 'item_add_to_cart', 99, 3);
function item_add_to_cart($passed, $product_id, $quantity)
{
    // Check Product has _SKU
    $sku = get_post_meta($product_id, '_sku', true);
    if (!empty($sku)) {
        // Connect To API
        // Update in WooCommerce
    }

    return false;
}

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

add_action('wp', 'show_product_page');
function show_product_page()
{
    global $post;
    if (function_exists('is_product')) {
        if (is_product()) {
            // Get Product ID
            $product_id = $post->ID;

            // Check Product has _SKU
            $sku = get_post_meta($product_id, '_sku', true);
            if (!empty($sku)) {
                // Connect To API
                // Update in WooCommerce
            }
        }
    }
}

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

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

    HBSTni

    شنبه ۱۱ مرداد ۱۳۹۹ ۱۰:۰۲ ب٫ظ

    درود یه آموزش خوبی شد برا من تازه کار
    یه مسئله برا من پیش اومده یه کم خارج از این موضوعه
    من از روی sku هر محصول و بکمک یه فایل csv و درون ریزی اون موجودی انبار - قیمت های ریگولار - قیمت فروش ویژه - تاریخ شروع و پایان فروش ویژه - پیش فروش - وزن - طول - عرض و ارتفاع رو میتونم آپدیت کنم در فایل scvم از برا هر یک از موارد ذکر شده از اینا استفاده کردم
    stock
    regular_price
    sale_price
    date_on_sale_from
    date_on_sale_to
    backorders
    deal_quantity
    weight
    length
    width
    height

    ولی درون ریز ووکامرس عملا deal_quantity رو نمیشناسه
    متای مربوط به تعداد فروش ویژه مگه این نیست؟
    ممنون میشم راهنمایی بفرمایید

    • مهرشاد درزی

      مهرشاد درزی

      دوشنبه ۱۳ مرداد ۱۳۹۹ ۹:۱۳ ب٫ظ

      طبق مستندات ووکامرس متایی به نام deal_quantity در هسته ی ووکامرس تا این لحظه وجود ندارد. و شما احتمالا از یک افزونه جانبی در حال استفاده هستید. لطفا به مستندات همان افزونه رجوع کنید.
      https://wordpress.org/support/topic/deal-quantity-and-deal-sales-counts-api/

    • avatar

      HBSTni

      دوشنبه ۱۳ مرداد ۱۳۹۹ ۱۰:۱۲ ب٫ظ

      ممنوم که وقت گذاشتید
      تا حالا به این موضوع دقت نکرده بودم بررسی کردم دیدم این متا رو قالب سایت ایجاد میکنه و یکی از امکانات قالبه تنها تونستم این متا رو بصورت meta:ـdeal_quantity در فایل csv و "به عنوان داده متا" ایمپورت کنم
      آقای درزی برا دولوپر شدن یه تازه کار چه اموزش هایی رو پیشنهاد میدید بعد دو سال نصاب ورد پرس بودن! علاقه مند شدم بیام سمت دولوپر شدن وردپرس
      یکی دو کورس پیدا کردم از ... ولی خب کمک کننده بودن شون برام مبهمه
      خودتون دوره آموزشی از صفر تا صد ارايه نمیدید؟

    • مهرشاد درزی

      مهرشاد درزی

      سه شنبه ۱۴ مرداد ۱۳۹۹ ۹:۱۲ ق٫ظ

      حدود 20 سرفصل و دوره جامع در زمینه توسعه دهنده وردپرس رو در حال آماده سازی و ضبط ویدیو ها هستیم. در آکادمی عضو بشید تا بهتون اطلاع رسانی بشه.

0