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

آموزش رند کردن هزینه حمل‌ونقل ووکامرس به مبالغ دلخواه (۱۰۰۰ یا ۵۰۰۰ تومانی)

آیا تا به حال برای شما پیش آمده که هزینه حمل‌ونقل فروشگاه شما مبالغی مانند ۲۱۲,۳۴۰ تومان یا ۸۸,۷۶۰ تومان باشد؟ این اعداد غیررند نه تنها ظاهر نامرتبی دارند، بلکه محاسبه و تطابق با عرف قیمت‌گذاری را دشوار می‌کنند. بسیاری از فروشگاه‌ها ترجیح می‌دهند هزینه حمل‌ونقل را به اعداد رند مانند ۱۰۱,۰۰۰ یا ۱۵۵,۰۰۰ تومان گرد کنند تا هم تجربه کاربری بهبود یابد و هم مدیریت مالی ساده‌تر شود. در این مقاله از مجموعه مقالات آموزشی وردپرس، یک کد کاربردی و استاندارد برای رند کردن هزینه حمل‌ونقل ووکامرس به مبالغ دلخواه (۱۰۰۰ تومانی یا ۵۰۰۰ تومانی) ارائه می‌دهیم. با استفاده از این کد، می‌توانید به‌راحتی انتخاب کنید که هزینه‌های حمل‌ونقل روش‌های خاص (مانند روش‌های پیش‌فرض ووکامرس) به نزدیک‌ترین مضرب ۱۰۰۰ یا ۵۰۰۰ تومان گرد شوند. این کار به شفافیت قیمت‌گذاری، ساده‌سازی محاسبات و افزایش رضایت مشتری کمک می‌کند.

چرا رند کردن هزینه حمل‌ونقل در ووکامرس اهمیت دارد؟

هزینه‌های حمل‌ونقل معمولاً بر اساس وزن، فاصله یا نوع بسته‌بندی محاسبه می‌شوند و اغلب اعداد اعشاری یا غیررند تولید می‌کنند. این اعداد می‌توانند برای کاربران گیج‌کننده باشند و اعتماد آن‌ها را کاهش دهند. با رند کردن هزینه‌ها به مبالغ ساده‌تر، مزایای زیر حاصل می‌شود:

  • بهبود تجربه کاربری: کاربران با اعداد رند و ساده، راحت‌تر تصمیم‌گیری می‌کنند و فرآیند خرید روان‌تر می‌شود.
  • ساده‌سازی محاسبات مالی: برای فروشنده، مدیریت فاکتورها و تطابق با سیستم‌های حسابداری آسان‌تر خواهد بود. همچنین اگر از درگاه پرداخت کارت به کارت استفاده می‌کنید چون هزینه رند می‌شود مشتری دقیقا هزینه ثبت شده را پرداخت می‌کند و هزینه کمتر یا بیشتر نخواهد بود.
  • افزایش شفافیت: هزینه‌های رند، معمولاً قابل‌پیش‌بینی‌تر هستند و مشتریان احساس می‌کنند هزینه‌ها عادلانه‌تر محاسبه شده‌اند.
  • انعطاف‌پذیری در قیمت‌گذاری: با انتخاب پایه گرد کردن (۱۰۰۰ یا ۵۰۰۰ تومان)، می‌توانید استراتژی قیمت‌گذاری خود را با نیازهای بازار هماهنگ کنید.

راهکار رند کردن هزینه حمل‌ونقل با کد اختصاصی

برای رند کردن هزینه حمل‌ونقل در ووکامرس، از فیلتر woocommerce_package_rates استفاده می‌کنیم. این فیلتر یکی از قدرتمندترین ابزارهای ووکامرس برای دستکاری هزینه‌های حمل‌ونقل قبل از نمایش به کاربر است. کد ارائه شده در این مقاله، با دریافت لیست روش‌های حمل‌ونقل موجود، هزینه هر روش را بررسی کرده و آن را به نزدیک‌ترین مضرب عدد پایه (۱۰۰۰ یا ۵۰۰۰) گرد می‌کند. همچنین مالیات مربوطه به‌طور متناسب با هزینه جدید تنظیم می‌شود تا محاسبات مالیاتی دقیق باقی بمانند. شما با تغییر یک متغیر ساده در ابتدای کد، می‌توانید پایه گرد کردن را انتخاب کنید. این روش کاملاً استاندارد، سبک و بدون نیاز به نصب افزونه است و با تمامی نسخه‌های ووکامرس سازگاری دارد.

کد کامل رند کردن هزینه حمل‌ونقل به مبالغ دلخواه

در زیر کد کامل و استاندارد برای رند کردن هزینه حمل‌ونقل ووکامرس به مبالغ ۱۰۰۰ یا ۵۰۰۰ تومانی آورده شده است. این کد را در انتهای فایل functions.php قالب فرزند خود قرار دهید. با تغییر مقدار $rounding_base، پایه گرد کردن را انتخاب کنید (۱۰۰۰ یا ۵۰۰۰).

/*
 * Round Up WooCommerce Shipping Costs to Custom Base (1000 or 5000 IRR)
 * Allows rounding shipping costs to the nearest multiple of 1000 or 5000 IRR
 * Mahdi Jafarzadeh
 * https://www.wpwm.ir/
 */

// ============================================================
// 1. CHOOSE YOUR ROUNDING BASE: 1000 or 5000 (IRR)
// ============================================================
$rounding_base = 1000; // Change to 5000 for rounding to nearest 5,000 IRR

// ============================================================
// 2. MAIN FILTER: Round shipping costs for selected methods
// ============================================================
add_filter('woocommerce_package_rates', 'round_up_shipping_cost_to_base', 999, 2);

function round_up_shipping_cost_to_base($rates, $package) {
    global $rounding_base;
    
    // Define which shipping methods should be rounded
    // Add or remove method IDs as needed
    $target_methods = array(
        'WC_Forehand_Method', // Example custom method
        'flat_rate',          // WooCommerce default flat rate
        'free_shipping',      // Usually 0, but just in case
        // Add your own shipping method IDs here
    );
    
    foreach ($rates as $rate_key => $rate) {
        // Check if this method should be rounded
        $should_round = false;
        foreach ($target_methods as $method_id) {
            if (strpos($rate_key, $method_id) !== false || strpos($rate->method_id, $method_id) !== false) {
                $should_round = true;
                break;
            }
        }
        
        if (!$should_round) {
            continue;
        }
        
        $current_cost = $rate->cost;
        if (empty($current_cost) || $current_cost <= 0) { continue; } // Round up to the nearest multiple of rounding base $rounded_cost = ceil($current_cost / $rounding_base) * $rounding_base; // Skip if already rounded if ($rounded_cost == $current_cost) { continue; } // Update cost $rates[$rate_key]->cost = $rounded_cost;
        
        // Update taxes proportionally
        $taxes = array();
        foreach ($rate->taxes as $tax_key => $tax) {
            if ($current_cost > 0) {
                $taxes[$tax_key] = $tax * ($rounded_cost / $current_cost);
            } else {
                $taxes[$tax_key] = 0;
            }
        }
        $rates[$rate_key]->taxes = $taxes;
    }
    
    return $rates;
}

نحوه عملکرد کد به صورت گام به گام

در این بخش، هر بخش از کد را به صورت دقیق بررسی می‌کنیم و نحوه عملکرد آن را توضیح می‌دهیم:

  1. خطوط ۱۰ تا ۱۲ – انتخاب پایه گرد کردن: با تعریف متغیر $rounding_base، پایه گرد کردن را مشخص می‌کنیم. مقدار ۱۰۰۰ به معنای گرد کردن به نزدیک‌ترین ۱۰۰۰ تومان و مقدار ۵۰۰۰ به معنای گرد کردن به نزدیک‌ترین ۵۰۰۰ تومان است. کاربر می‌تواند به راحتی این مقدار را تغییر دهد.
  2. خط ۱۶ – افزودن فیلتر woocommerce_package_rates: با استفاده از add_filter('woocommerce_package_rates', 'round_up_shipping_cost_to_base', 999, 2)، یک فیلتر به هوک woocommerce_package_rates اضافه می‌کنیم. عدد ۹۹۹ به عنوان اولویت، تضمین می‌کند که این فیلتر پس از سایر فیلترها اجرا شود و تغییرات ما بر روی خروجی نهایی اعمال گردد.
  3. خط ۱۸ – تعریف تابع: تابع round_up_shipping_cost_to_base با دو پارامتر $rates (لیست روش‌های حمل‌ونقل) و $package (اطلاعات بسته ارسالی) تعریف می‌شود.
  4. خط ۱۹ – دسترسی به متغیر سراسری: با استفاده از global $rounding_base;، مقدار پایه گرد کردن را به داخل تابع می‌آوریم.
  5. خطوط ۲۲ تا ۲۶ – تعریف روش‌های هدف: آرایه $target_methods شامل شناسه‌های روش‌های حمل‌ونقلی است که می‌خواهیم گرد شوند. شما می‌توانید شناسه روش‌های خود را در این آرایه اضافه یا حذف کنید.
  6. خطوط ۲۸ تا ۴۰ – بررسی و گرد کردن: برای هر روش حمل‌ونقل، بررسی می‌شود که آیا شناسه آن در لیست اهداف قرار دارد یا خیر. اگر بله، هزینه فعلی دریافت شده و در صورت معتبر بودن، با فرمول ceil($current_cost / $rounding_base) * $rounding_base به نزدیک‌ترین مضرب پایه گرد می‌شود.
  7. خطوط ۴۲ تا ۴۵ – صرف‌نظر از هزینه‌های از پیش رند: اگر هزینه فعلی با هزینه گرد شده برابر باشد، از اعمال تغییرات صرف‌نظر می‌شود تا از عملیات غیرضروری جلوگیری شود.
  8. خط ۴۸ – به‌روزرسانی هزینه: هزینه جدید به شیء روش حمل‌ونقل اختصاص داده می‌شود.
  9. خطوط ۵۱ تا ۵۸ – به‌روزرسانی مالیات: مالیات‌های هر روش نیز به‌طور متناسب با هزینه جدید تنظیم می‌شوند تا محاسبات مالیاتی دقیق باقی بمانند. نسبت هزینه جدید به هزینه قدیم در هر مالیات ضرب می‌شود.
  10. خط ۶۱ – بازگشت لیست اصلاح‌شده: در نهایت، لیست اصلاح‌شده روش‌های حمل‌ونقل بازگردانده می‌شود تا ووکامرس آن را به کاربر نمایش دهد.

نکات مهم

در این بخش به نکات کلیدی برای استفاده صحیح از این کد اشاره می‌کنیم که باید به آن‌ها توجه ویژه‌ای داشته باشید:

  • استفاده از قالب فرزند: کد را در فایل functions.php قالب فرزند قرار دهید تا با بروزرسانی قالب اصلی، تغییرات شما از بین نرود.
  • شناسه روش‌های حمل‌ونقل: شناسه‌های روش‌های حمل‌ونقل ووکامرس ممکن است با توجه به افزونه‌های نصب‌شده متفاوت باشد. برای یافتن شناسه دقیق هر روش، می‌توانید از ابزارهای اشکال‌زدایی یا مشاهده کلیدهای آرایه $rates استفاده کنید. به عنوان مثال، روش پست پیش‌فرض معمولاً flat_rate است.
  • تأثیر بر مالیات: کد مالیات را به‌طور متناسب با هزینه جدید تنظیم می‌کند، اما در صورتی که قوانین مالیاتی شما پیچیده است، بهتر است پس از اعمال کد، مالیات محاسبه‌شده را بررسی کنید.
  • تست پس از اعمال کد: پس از افزودن کد، حتماً یک محصول را به سبد خرید اضافه کرده و در صفحه تسویه حساب، هزینه حمل‌ونقل را بررسی کنید تا از عملکرد صحیح گرد کردن اطمینان حاصل کنید.
  • گرد کردن به بالا (Ceil): این کد از تابع ceil() برای گرد کردن به بالا استفاده می‌کند، یعنی هزینه همیشه به عدد بالاتر گرد می‌شود. اگر به گرد کردن به نزدیک‌ترین عدد نیاز دارید، می‌توانید از round() به جای ceil() استفاده کنید.
  • سفارشی‌سازی روش‌های هدف: آرایه $target_methods را بر اساس نیاز خود ویرایش کنید. می‌توانید روش‌های مختلفی مانند flat_rate، local_pickup یا شناسه‌های روش‌های سفارشی را اضافه کنید.

جمع‌بندی

در این مقاله از سری مقالات آموزشی وردپرس، به بررسی روش رند کردن هزینه حمل‌ونقل ووکامرس به مبالغ دلخواه پرداختیم. با استفاده از کد ساده و استانداردی که ارائه شد، می‌توانید هزینه‌های حمل‌ونقل روش‌های خاص را به نزدیک‌ترین مضرب ۱۰۰۰ یا ۵۰۰۰ تومان گرد کنید. این تغییر کوچک اما تأثیرگذار، تجربه کاربری را بهبود می‌بخشد، شفافیت قیمت‌گذاری را افزایش می‌دهد و مدیریت مالی را آسان‌تر می‌کند. با تنظیم متغیر $rounding_base، به راحتی می‌توانید بین دو پایه گرد کردن جابه‌جا شوید و استراتژی قیمت‌گذاری خود را شخصی‌سازی کنید.

امیدواریم این آموزش برای شما مفید بوده باشد. اگر سوالی درباره رند کردن هزینه حمل‌ونقل، نحوه استفاده از کد یا هر بخش دیگری از این آموزش دارید، لطفاً در بخش نظرات مطرح کنید. همچنین اگر تجربه‌ای در سفارشی‌سازی هزینه‌های حمل‌ونقل ووکامرس دارید، خوشحال می‌شویم آن را با ما و سایر کاربران به اشتراک بگذارید.

نظر یا سوال شما درباره این کد

اگر نظر یا سوالی درباره این کد دارید بنویسید، ما در سریعترین زمان بررسی می‌کنیم و جواب شما رو میدیم.

ایمیل شما منتشر نخواهد شد.
اولین نفری باشید که نظر می دهد!

مقالات آموزش و نکات وردپرس