برای ایجاد یک افزونه تنظیم نرخ ثابت ارسال پستی برای وردپرس و ووکامرس که فقط برای یک محصول هزینه ثابت ارسال داشته باشد و اگر این محصول با سایر محصولات خریداری شود، هزینه ارسال دریافت نشود، میتوانید به این صورت عمل کنید:
ساختار افزونه
- ایجاد پوشه افزونه و فایل اصلی
- یک پوشه جدید با نام دلخواه (مثلاً
wc-single-product-shipping
) در مسیرwp-content/plugins
ایجاد کنید. - یک فایل با نام مشابه با افزونه (مثلاً
wc-single-product-shipping.php
) درون پوشه ایجاد کنید.
- یک پوشه جدید با نام دلخواه (مثلاً
-
کد اصلی افزونه در فایل افزونه، کد زیر را وارد کنید تا بتوانید هزینه ارسال را به صورت دلخواه برای یک محصول خاص تنظیم کنید.
<?php /* Plugin Name: WooCommerce Single Product Shipping Description: تنظیم هزینه ثابت ارسال برای یک محصول در ووکامرس. Version: 1.0 Author: Your Name */ if (!defined('ABSPATH')) exit; // جلوگیری از دسترسی مستقیم // افزودن تنظیمات برای محصول خاص در صفحه محصول ووکامرس add_action('woocommerce_product_options_general_product_data', 'wc_add_custom_shipping_field'); function wc_add_custom_shipping_field() { woocommerce_wp_checkbox([ 'id' => '_enable_fixed_shipping', 'label' => 'فعالسازی هزینه ثابت ارسال برای این محصول', ]); woocommerce_wp_text_input([ 'id' => '_fixed_shipping_cost', 'label' => 'هزینه ثابت ارسال', 'desc_tip' => 'true', 'description' => 'هزینه ارسال ثابت برای این محصول (تنها زمانی که به تنهایی خریداری میشود).', 'type' => 'number', 'custom_attributes' => ['step' => 'any', 'min' => '0'] ]); } // ذخیره تنظیمات هزینه ارسال برای محصول خاص add_action('woocommerce_process_product_meta', 'wc_save_custom_shipping_field'); function wc_save_custom_shipping_field($post_id) { $enable_fixed_shipping = isset($_POST['_enable_fixed_shipping']) ? 'yes' : 'no'; update_post_meta($post_id, '_enable_fixed_shipping', $enable_fixed_shipping); if (isset($_POST['_fixed_shipping_cost'])) { update_post_meta($post_id, '_fixed_shipping_cost', sanitize_text_field($_POST['_fixed_shipping_cost'])); } } // افزودن شرط برای محاسبه هزینه ارسال در سبد خرید add_filter('woocommerce_package_rates', 'wc_custom_shipping_cost_for_single_product', 10, 2); function wc_custom_shipping_cost_for_single_product($rates, $package) { $fixed_shipping_product_id = null; $fixed_shipping_cost = 0; $other_products = false; // بررسی محصولات در سبد خرید foreach (WC()->cart->get_cart() as $cart_item) { $product_id = $cart_item['product_id']; $enable_fixed_shipping = get_post_meta($product_id, '_enable_fixed_shipping', true); $fixed_cost = get_post_meta($product_id, '_fixed_shipping_cost', true); if ($enable_fixed_shipping === 'yes') { $fixed_shipping_product_id = $product_id; $fixed_shipping_cost = floatval($fixed_cost); } else { $other_products = true; } } // اگر فقط محصول خاص در سبد خرید باشد، هزینه ثابت ارسال را اعمال کن if ($fixed_shipping_product_id && !$other_products) { foreach ($rates as $rate_key => $rate) { $rates[$rate_key]->cost = $fixed_shipping_cost; } } elseif ($fixed_shipping_product_id && $other_products) { // اگر محصول با سایر محصولات خریداری شود، هزینه ارسال صفر میشود foreach ($rates as $rate_key => $rate) { $rates[$rate_key]->cost = 0; } } return $rates;
}
نحوه استفاده از افزونه
- نصب و فعالسازی افزونه:
- افزونه را در پوشه
wp-content/plugins/
قرار دهید. - از پیشخوان وردپرس به بخش افزونهها بروید و افزونه جدید را فعال کنید.
- افزونه را در پوشه
- تنظیم محصول خاص:
- به صفحه ویرایش محصول در ووکامرس بروید.
- در بخش “دادههای محصول” و تب “عمومی”، یک گزینه جدید برای فعالسازی هزینه ثابت ارسال مشاهده میکنید.
- اگر گزینه “فعالسازی هزینه ثابت ارسال برای این محصول” را انتخاب کنید، میتوانید هزینه ارسال ثابت مورد نظر را تنظیم کنید.
- محاسبه هزینه ارسال:
- وقتی فقط این محصول خاص در سبد خرید باشد، هزینه ثابت ارسال محاسبه میشود.
- اگر این محصول با سایر محصولات در سبد خرید باشد، هزینه ارسال صفر خواهد شد.
توضیحات کد
- wc_add_custom_shipping_field: این تابع یک فیلد سفارشی برای هزینه ارسال در صفحه ویرایش محصول ایجاد میکند.
- wc_save_custom_shipping_field: این تابع تنظیمات هزینه ارسال را برای محصول ذخیره میکند.
- wc_custom_shipping_cost_for_single_product: این تابع هزینه ارسال را در سبد خرید بررسی کرده و در صورت لزوم، هزینه ارسال ثابت یا صفر را اعمال میکند.