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

افزونه تنظیم نرخ ثابت ارسال پستی

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

ساختار افزونه

  1. ایجاد پوشه افزونه و فایل اصلی
    • یک پوشه جدید با نام دلخواه (مثلاً wc-single-product-shipping) در مسیر wp-content/plugins ایجاد کنید.
    • یک فایل با نام مشابه با افزونه (مثلاً wc-single-product-shipping.php) درون پوشه ایجاد کنید.
  2. کد اصلی افزونه در فایل افزونه، کد زیر را وارد کنید تا بتوانید هزینه ارسال را به صورت دلخواه برای یک محصول خاص تنظیم کنید.

<?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;

}

نحوه استفاده از افزونه

  1. نصب و فعال‌سازی افزونه:
    • افزونه را در پوشه wp-content/plugins/ قرار دهید.
    • از پیشخوان وردپرس به بخش افزونه‌ها بروید و افزونه جدید را فعال کنید.
  2. تنظیم محصول خاص:
    • به صفحه ویرایش محصول در ووکامرس بروید.
    • در بخش “داده‌های محصول” و تب “عمومی”، یک گزینه جدید برای فعال‌سازی هزینه ثابت ارسال مشاهده می‌کنید.
    • اگر گزینه “فعال‌سازی هزینه ثابت ارسال برای این محصول” را انتخاب کنید، می‌توانید هزینه ارسال ثابت مورد نظر را تنظیم کنید.
  3. محاسبه هزینه ارسال:
    • وقتی فقط این محصول خاص در سبد خرید باشد، هزینه ثابت ارسال محاسبه می‌شود.
    • اگر این محصول با سایر محصولات در سبد خرید باشد، هزینه ارسال صفر خواهد شد.

توضیحات کد

  • wc_add_custom_shipping_field: این تابع یک فیلد سفارشی برای هزینه ارسال در صفحه ویرایش محصول ایجاد می‌کند.
  • wc_save_custom_shipping_field: این تابع تنظیمات هزینه ارسال را برای محصول ذخیره می‌کند.
  • wc_custom_shipping_cost_for_single_product: این تابع هزینه ارسال را در سبد خرید بررسی کرده و در صورت لزوم، هزینه ارسال ثابت یا صفر را اعمال می‌کند.