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

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

این راهکار برای فروشگاه‌هایی مناسب است که هزینه باربری ثابت نیست و نمی‌خواهند هزینه آن را به صورت خودکار در ووکامرس محاسبه کنند.

ارسال باربری در ووکامرس چگونه کار می‌کند؟

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

عملکرد کد ساده است:

  1. وزن محصولات موجود در سبد خرید محاسبه می‌شود.
  2. مدیر سایت یک حد وزنی مشخص می‌کند.
  3. تا قبل از رسیدن سبد خرید به این حد، روش‌های معمول ارسال ووکامرس نمایش داده می‌شوند.
  4. اگر وزن سبد خرید به حد تعیین‌شده برسد یا از آن بیشتر شود، تمام روش‌های ارسال موجود حذف می‌شوند.
  5. به جای پیام معمول ووکامرس، پیام سفارشی مربوط به ارسال سفارش با باربری نمایش داده می‌شود.

بنابراین اگر مثلاً حد وزن روی ۳۰ کیلوگرم تنظیم شده باشد، سفارش ۲۹ کیلوگرمی می‌تواند با روش‌های عادی ارسال شود، اما سفارش ۳۰ کیلوگرمی یا بیشتر مشمول ارسال با باربری خواهد شد.

چرا برای سفارش‌های سنگین باید روش ارسال محدود شود؟

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

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

اگر روش ارسال تیپاکس همچنان در صفحه تسویه‌حساب نمایش داده شود، مشتری ممکن است آن را انتخاب کند؛ در حالی که فروشنده قصد ندارد سفارش سنگین را با این روش ارسال کند.

با تعیین محدودیت وزن، این مشکل برطرف می‌شود.

مثال: محدود کردن ارسال برای سفارش‌های بالای ۳۰ کیلوگرم

فرض کنید فروشگاه شما سفارش‌های کمتر از ۳۰ کیلوگرم را با روش‌های معمول ارسال می‌کند.

در این حالت می‌توان حد وزن را روی ۳۰ کیلوگرم تنظیم کرد.

وزن سبد خریدوضعیت ارسال
۱۰ کیلوگرمروش‌های معمول ارسال نمایش داده می‌شوند
۲۰ کیلوگرمروش‌های معمول ارسال نمایش داده می‌شوند
۲۹ کیلوگرمروش‌های معمول ارسال نمایش داده می‌شوند
۲۹.۹ کیلوگرمروش‌های معمول ارسال نمایش داده می‌شوند
۳۰ کیلوگرمروش‌های معمول حذف و پیام باربری نمایش داده می‌شود
۳۵ کیلوگرمروش‌های معمول حذف و پیام باربری نمایش داده می‌شود
۵۰ کیلوگرمروش‌های معمول حذف و پیام باربری نمایش داده می‌شود

نکته مهم این است که شرط کد از نوع برابر یا بیشتر از حد تعیین‌شده است. بنابراین اگر حد روی ۳۰ کیلوگرم باشد، خود سفارش ۳۰ کیلوگرمی نیز شامل محدودیت خواهد شد.

این کد چه روش‌های ارسالی را حذف می‌کند؟

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

وقتی وزن سبد خرید به حد تعیین‌شده برسد، تمام روش‌های ارسال ووکامرس برای آن حالت حذف می‌شوند.

این روش مزیت مهمی دارد؛ زیرا اگر در آینده یک روش ارسال دیگر نیز به فروشگاه اضافه کنید، لازم نیست کد را برای آن روش تغییر دهید.

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

آیا باربری به عنوان Shipping Method اضافه می‌شود؟

خیر.

این کد هیچ Shipping Method جدیدی برای باربری ایجاد نمی‌کند.

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

در چنین شرایطی، تعریف یک هزینه ثابت برای باربری در ووکامرس می‌تواند باعث محاسبه اشتباه هزینه ارسال شود.

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

هزینه باربری چگونه محاسبه می‌شود؟

این کد هیچ هزینه‌ای برای باربری محاسبه نمی‌کند.

در واقع، محاسبه هزینه باربری خارج از وظیفه این قطعه کد است.

مدیر فروشگاه می‌تواند در پیام نمایش داده شده به مشتری مشخص کند که هزینه باربری:

  • به صورت پس‌کرایه دریافت می‌شود؛
  • توسط فروشنده پرداخت می‌شود؛
  • پس از ثبت سفارش اعلام می‌شود؛
  • یا بر اساس مقصد و شرایط سفارش تعیین خواهد شد.

به همین دلیل متن پیام از داخل پنل مدیریت قابل ویرایش است.

پیام ارسال با باربری قابل ویرایش است

یکی از امکانات این کد، امکان تغییر متن پیام از پنل مدیریت وردپرس است.

برای مثال می‌توانید پیام زیر را نمایش دهید:

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

البته متن بالا فقط یک نمونه است و می‌توانید آن را متناسب با شرایط فروشگاه خود تغییر دهید.

استفاده از متغیرهای پویا در پیام

برای نمایش خودکار وزن سفارش، دو متغیر در اختیار شما قرار دارد:

{weight} : نمایش وزن فعلی سبد خرید.

{limit} : نمایش حد وزنی که در تنظیمات تعیین شده است.

برای مثال می‌توانید این متن را قرار دهید:

وزن سبد خرید شما {weight} کیلوگرم است و از حد ارسال معمولی {limit} کیلوگرم عبور کرده است. سفارش شما از طریق باربری ارسال خواهد شد.

اگر وزن سبد ۳۵ کیلوگرم و حد تعیین‌شده ۳۰ کیلوگرم باشد، مقدار متغیرها به صورت خودکار جایگزین می‌شوند.

محاسبه وزن سبد خرید چگونه انجام می‌شود؟

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

برای مثال اگر یک محصول ۵ کیلوگرم وزن داشته باشد و مشتری ۴ عدد از آن را خریداری کند:

۵ × ۴ = ۲۰ کیلوگرم

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

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

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

آموزش نصب کد ارسال باربری در ووکامرس

ارسال باربری در ووکامرس با محدودیت وزن سبد خرید

برای استفاده از این قابلیت نیازی به ساخت افزونه اختصاصی ندارید.

می‌توانید کد را مستقیماً در افزونه Code Snippets قرار دهید.

مرحله اول: ایجاد Snippet

از پیشخوان وردپرس وارد بخش Code Snippets شوید و یک Snippet جدید ایجاد کنید.

یک نام مناسب برای آن انتخاب کنید؛ برای مثال:

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

مرحله دوم: قرار دادن کد

کد کامل زیر را در Snippet قرار دهید.


/**
 *
 * @package ICODITO_Shipping_Blocker
 * @author  آی کدیتو
 * @version 1.1.0
 */

if ( ! defined( 'ABSPATH' ) ) {
	exit;
}

class ICODITO_Shipping_Blocker {

	/**
	 * نام گروه تنظیمات.
	 *
	 * @var string
	 */
	private $option_group = 'icodito_shipping_blocker_options';

	/**
	 * فعال بودن قابلیت.
	 *
	 * @var string
	 */
	private $option_enabled = 'icodito_shipping_blocker_enabled';

	/**
	 * حداقل وزن برای ارسال با باربری.
	 *
	 * @var string
	 */
	private $option_min_weight = 'icodito_shipping_blocker_min_weight';

	/**
	 * پیام اطلاع‌رسانی.
	 *
	 * @var string
	 */
	private $option_message = 'icodito_shipping_blocker_message';

	/**
	 * پیام پیش‌فرض.
	 *
	 * @var string
	 */
	private $default_message = 'وزن سبد خرید شما {weight} کیلوگرم است و به حد ارسال با روش‌های معمولی ({limit} کیلوگرم) رسیده است. سفارش شما از طریق باربری ارسال خواهد شد. جزئیات هزینه و شرایط ارسال توسط فروشنده اطلاع‌رسانی می‌شود.';

	/**
	 * راه‌اندازی کلاس.
	 */
	public function __construct() {

		if ( ! class_exists( 'WooCommerce' ) ) {
			return;
		}

		// مدیریت.
		add_action( 'admin_menu', array( $this, 'add_admin_menu' ) );
		add_action( 'admin_init', array( $this, 'register_settings' ) );
		add_action( 'admin_enqueue_scripts', array( $this, 'admin_styles' ) );

		// فرانت‌اند.
		add_action( 'wp_enqueue_scripts', array( $this, 'frontend_styles' ) );

		/*
		 * در وزن تعیین‌شده، تمام روش‌های ارسال ووکامرس حذف می‌شوند.
		 * باربری به عنوان Shipping Method تعریف نمی‌شود.
		 */
		add_filter( 'woocommerce_package_rates', array( $this, 'filter_shipping_rates' ), 100, 2 );

		// جایگزینی پیام پیش‌فرض ووکامرس.
		add_filter( 'woocommerce_cart_no_shipping_available_html', array( $this, 'no_shipping_available_html' ), 10, 1 );
		add_filter( 'woocommerce_no_shipping_available_html', array( $this, 'no_shipping_available_html' ), 10, 1 );
	}

	/**
	 * افزودن صفحه تنظیمات زیرمجموعه ووکامرس.
	 */
	public function add_admin_menu() {

		add_submenu_page(
			'woocommerce',
			__( 'ارسال با باربری', 'icodito' ),
			__( 'ارسال با باربری', 'icodito' ),
			'manage_options',
			'icodito-shipping-blocker',
			array( $this, 'render_settings_page' )
		);
	}

	/**
	 * ثبت تنظیمات.
	 */
	public function register_settings() {

		register_setting(
			$this->option_group,
			$this->option_enabled,
			array(
				'type'              => 'boolean',
				'sanitize_callback' => array( $this, 'sanitize_boolean' ),
				'default'           => false,
			)
		);

		register_setting(
			$this->option_group,
			$this->option_min_weight,
			array(
				'type'              => 'number',
				'sanitize_callback' => array( $this, 'sanitize_weight' ),
				'default'           => 30,
			)
		);

		register_setting(
			$this->option_group,
			$this->option_message,
			array(
				'type'              => 'string',
				'sanitize_callback' => 'wp_kses_post',
				'default'           => $this->default_message,
			)
		);
	}

	/**
	 * پاک‌سازی مقدار فعال/غیرفعال.
	 *
	 * @param mixed $value مقدار تنظیم.
	 * @return bool
	 */
	public function sanitize_boolean( $value ) {

		return ! empty( $value );
	}

	/**
	 * پاک‌سازی وزن.
	 *
	 * @param mixed $value مقدار وزن.
	 * @return float
	 */
	public function sanitize_weight( $value ) {

		$value = (float) $value;

		return max( 0, $value );
	}

	/**
	 * استایل صفحه تنظیمات.
	 *
	 * @param string $hook شناسه صفحه.
	 */
	public function admin_styles( $hook ) {

		if ( 'woocommerce_page_icodito-shipping-blocker' !== $hook ) {
			return;
		}
		?>
		<style>
			.icodito-author-support {
				display: flex;
				align-items: flex-start;
				gap: 16px;
				margin: 25px 0;
				padding: 20px 22px;
				background: #f8fafc;
				border: 1px solid #e2e8f0;
				border-right: 4px solid #00bcd4;
				border-radius: 10px 0 0 10px;
				direction: rtl;
				text-align: right;
				box-sizing: border-box;
			}

			.icodito-author-support-icon {
				display: flex;
				align-items: center;
				justify-content: center;
				flex: 0 0 44px;
				width: 44px;
				height: 44px;
				background: #ffffff;
				border: 1px solid #e2e8f0;
				border-radius: 50%;
				font-size: 20px;
				line-height: 1;
			}

			.icodito-author-support-content {
				flex: 1;
				min-width: 0;
			}

			.icodito-author-support-content h3 {
				margin: 0 0 8px;
				color: #1e293b;
				font-size: 15px;
				font-weight: 700;
				line-height: 1.8;
			}

			.icodito-author-support-content p {
				margin: 0;
				color: #64748b;
				font-size: 13px;
				line-height: 2;
			}

			.icodito-author-support-links {
				display: flex;
				flex-wrap: wrap;
				align-items: center;
				gap: 8px;
				margin-top: 14px;
			}

			.icodito-author-support-links a {
				display: inline-flex;
				align-items: center;
				justify-content: center;
				padding: 7px 13px;
				background: #ffffff;
				color: #00a5bb;
				border: 1px solid #cbd5e1;
				border-radius: 7px;
				font-size: 12px;
				font-weight: 600;
				text-decoration: none;
				transition: all 0.2s ease;
			}

			.icodito-author-support-links a:hover {
				background: #00bcd4;
				color: #ffffff;
				border-color: #00bcd4;
			}

			.icodito-settings-wrap {
				background: #fff;
				padding: 20px 25px;
				border-radius: 8px;
				box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08);
			}

			.icodito-settings-wrap h2 {
				border-bottom: 1px solid #e5e7eb;
				padding-bottom: 12px;
				margin-top: 0;
				color: #1e293b;
			}

			.icodito-settings-wrap .form-table th {
				width: 200px;
				padding: 20px 10px 20px 0;
			}

			.icodito-settings-wrap .form-table td {
				padding: 20px 0;
			}

			.icodito-settings-wrap .description {
				color: #64748b;
				font-size: 13px;
				margin-top: 4px;
			}

			.icodito-settings-wrap .wp-editor-wrap {
				max-width: 700px;
			}

			.icodito-settings-wrap .submit {
				margin-top: 10px;
			}

			@media (max-width: 600px) {

				.icodito-author-support {
					gap: 12px;
					padding: 16px;
				}

				.icodito-author-support-icon {
					flex-basis: 38px;
					width: 38px;
					height: 38px;
					font-size: 17px;
				}

				.icodito-author-support-content h3 {
					font-size: 14px;
				}

				.icodito-author-support-content p {
					font-size: 12px;
				}

				.icodito-author-support-links {
					flex-direction: column;
					align-items: stretch;
				}

				.icodito-author-support-links a {
					width: 100%;
				}
			}
		</style>
		<?php
	}

	/**
	 * نمایش صفحه تنظیمات.
	 */
	public function render_settings_page() {
		?>
		<div class="wrap icodito-settings-wrap">

			<?php $this->icodito_author_support_box(); ?>

			<h2><?php esc_html_e( 'تنظیمات ارسال با باربری', 'icodito' ); ?></h2>

			<form method="post" action="options.php">

				<?php
				settings_fields( $this->option_group );
				do_settings_sections( $this->option_group );
				?>

				<table class="form-table">

					<tr>
						<th scope="row">
							<?php esc_html_e( 'فعال بودن قابلیت', 'icodito' ); ?>
						</th>

						<td>
							<label>
								<input
									type="checkbox"
									name="<?php echo esc_attr( $this->option_enabled ); ?>"
									value="1"
									<?php checked( get_option( $this->option_enabled, false ), true ); ?>
								/>
								<?php esc_html_e( 'فعال کردن ارسال با باربری بر اساس وزن', 'icodito' ); ?>
							</label>

							<p class="description">
								<?php
								esc_html_e(
									'در صورت فعال بودن، وقتی وزن سبد خرید به حد تعیین‌شده برسد یا از آن بیشتر شود، تمام روش‌های ارسال عادی ووکامرس حذف شده و پیام ارسال با باربری نمایش داده می‌شود.',
									'icodito'
								);
								?>
							</p>
						</td>
					</tr>

					<tr>
						<th scope="row">
							<?php esc_html_e( 'حداقل وزن (کیلوگرم)', 'icodito' ); ?>
						</th>

						<td>
							<input
								type="number"
								name="<?php echo esc_attr( $this->option_min_weight ); ?>"
								value="<?php echo esc_attr( get_option( $this->option_min_weight, 30 ) ); ?>"
								step="0.1"
								min="0"
								style="width:120px;"
							/>

							<p class="description">
								<?php
								esc_html_e(
									'اگر وزن کل سبد خرید به این مقدار برسد یا بیشتر شود، روش‌های ارسال عادی حذف می‌شوند.',
									'icodito'
								);
								?>
							</p>
						</td>
					</tr>

					<tr>
						<th scope="row">
							<?php esc_html_e( 'متن پیام', 'icodito' ); ?>
						</th>

						<td>
							<?php
							$message = get_option(
								$this->option_message,
								$this->default_message
							);

							wp_editor(
								$message,
								'icodito_shipping_message_editor',
								array(
									'textarea_name' => $this->option_message,
									'textarea_rows' => 8,
									'media_buttons' => false,
									'tinymce'       => array(
										'toolbar1' => 'bold,italic,underline,link,unlink,undo,redo',
									),
									'quicktags'     => false,
								)
							);
							?>

							<p class="description">
								<?php
								esc_html_e(
									'از {weight} برای نمایش وزن سبد و از {limit} برای نمایش حد تعیین‌شده استفاده کنید. متن پیام کاملاً قابل ویرایش است و می‌توانید شرایط هزینه یا پس‌کرایه را نیز در آن توضیح دهید.',
									'icodito'
								);
								?>
							</p>
						</td>
					</tr>

				</table>

				<?php submit_button(); ?>

			</form>

		</div>
		<?php
	}

	/**
	 * باکس حمایت از آی کدیتو.
	 */
	private function icodito_author_support_box() {
		?>
		<div class="icodito-author-support">

			<div class="icodito-author-support-icon">
				❤️
			</div>

			<div class="icodito-author-support-content">

				<h3>
					این کد توسط آی کدیتو نوشته و بهینه شده است
				</h3>

				<p>
					این کد با هدف ارائه یک راهکار کاربردی و رایگان توسط
					<strong>آی کدیتو</strong>
					تهیه و بهینه شده است.
					در صورت مفید بودن این کد و استفاده از آن در سایت خود،
					می‌توانید با حمایت از آی کدیتو به ادامه توسعه و انتشار
					کدها و منابع رایگان کمک کنید.
				</p>

				<div class="icodito-author-support-links">

					<a
						href="https://icodito.ir/"
						target="_blank"
						rel="noopener noreferrer"
					>
						وب‌سایت آی کدیتو
					</a>

					<a
						href="https://donito.me/icodito"
						target="_blank"
						rel="noopener noreferrer"
					>
						حمایت مالی از آی کدیتو
					</a>

				</div>

			</div>

		</div>
		<?php
	}

	/**
	 * محاسبه وزن کل سبد خرید.
	 *
	 * @return float
	 */
	private function get_cart_total_weight() {

		$total_weight = 0.0;

		if ( ! function_exists( 'WC' ) || ! WC()->cart ) {
			return $total_weight;
		}

		$cart = WC()->cart;

		if ( $cart->is_empty() ) {
			return $total_weight;
		}

		foreach ( $cart->get_cart() as $cart_item ) {

			if ( empty( $cart_item['data'] ) || ! is_a( $cart_item['data'], 'WC_Product' ) ) {
				continue;
			}

			$product  = $cart_item['data'];
			$quantity = isset( $cart_item['quantity'] ) ? (int) $cart_item['quantity'] : 0;
			$weight   = (float) $product->get_weight();

			if ( $quantity <= 0 || $weight <= 0 ) {
				continue;
			}

			$total_weight += $weight * $quantity;
		}

		return $total_weight;
	}

	/**
	 * بررسی فعال بودن محدودیت وزن.
	 *
	 * @return bool
	 */
	private function should_block_shipping() {

		if ( ! get_option( $this->option_enabled, false ) ) {
			return false;
		}

		$min_weight = (float) get_option(
			$this->option_min_weight,
			30
		);

		if ( $min_weight <= 0 ) {
			return false;
		}

		return $this->get_cart_total_weight() >= $min_weight;
	}

	/**
	 * حذف تمام روش‌های ارسال ووکامرس در وزن سنگین.
	 *
	 * باربری به عنوان روش ارسال ووکامرس تعریف نمی‌شود.
	 * هدف این بخش فقط جلوگیری از انتخاب روش‌های ارسال عادی است.
	 *
	 * @param array $rates  روش‌های ارسال.
	 * @param array $package اطلاعات بسته.
	 * @return array
	 */
	public function filter_shipping_rates( $rates, $package ) {

		if ( ! $this->should_block_shipping() ) {
			return $rates;
		}

		return array();
	}

	/**
	 * جایگزین کردن پیام پیش‌فرض ووکامرس.
	 *
	 * @param string $html پیام فعلی.
	 * @return string
	 */
	public function no_shipping_available_html( $html ) {

		if ( ! $this->should_block_shipping() ) {
			return $html;
		}

		return $this->get_formatted_message();
	}

	/**
	 *
	 * @return string
	 */
	private function get_formatted_message() {

		$message_raw = get_option(
			$this->option_message,
			$this->default_message
		);

		$total_weight = $this->get_cart_total_weight();

		$min_weight = (float) get_option(
			$this->option_min_weight,
			30
		);

		$replacements = array(
			'{weight}' => $this->format_weight( $total_weight ),
			'{limit}'  => $this->format_weight( $min_weight ),
		);

		$message = str_replace(
			array_keys( $replacements ),
			array_values( $replacements ),
			$message_raw
		);

		$message = wp_kses_post( $message );

		return sprintf(
			'<div class="icodito-shipping-message"><div class="icodito-shipping-content">%s</div></div>',
			$message
		);
	}

	/**
	
	 *
	 * @param float $number وزن.
	 * @return string
	 */
	private function format_weight( $number ) {

		$number = (float) $number;

		if ( floor( $number ) === $number ) {
			return number_format_i18n( $number, 0 );
		}

		return number_format_i18n( $number, 2 );
	}

	public function frontend_styles() {

		if ( ! is_cart() && ! is_checkout() ) {
			return;
		}
		?>
		<style>
			.icodito-shipping-message {
				display: flex;
				align-items: flex-start;
				gap: 14px;
				padding: 14px 16px;
				margin: 15px 0;
				background: #fff7ed;
				border: 1px solid #fed7aa;
				border-radius: 12px;
				box-shadow: 0 4px 12px rgba(254, 215, 170, 0.35);
				direction: rtl;
				text-align: right;
				font-size: 14px;
				line-height: 1.8;
				color: #7c3a1e;
				box-sizing: border-box;
			}

			.icodito-shipping-message .icodito-shipping-content {
				flex: 1;
				min-width: 0;
			}

			.icodito-shipping-message .icodito-shipping-content p {
				margin: 0 0 6px;
			}

			.icodito-shipping-message .icodito-shipping-content p:last-child {
				margin-bottom: 0;
			}

			@media (max-width: 600px) {

				.icodito-shipping-message {
					gap: 10px;
					padding: 14px 16px;
				}
			}
		</style>
		<?php
	}
}

new ICODITO_Shipping_Blocker();

مرحله سوم: فعال کردن Snippet

پس از قرار دادن کد، Snippet را ذخیره و فعال کنید.

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

تنظیمات کد از کجا انجام می‌شود؟

بعد از فعال کردن کد، یک بخش جدید با عنوان:

ووکامرس ← ارسال با باربری

در پیشخوان وردپرس ایجاد می‌شود.

در این بخش می‌توانید تنظیمات زیر را مدیریت کنید:

فعال یا غیرفعال کردن قابلیت

می‌توانید هر زمان که بخواهید محدودیت ارسال بر اساس وزن را فعال یا غیرفعال کنید.

تعیین حد وزن

در قسمت حداقل وزن می‌توانید مقدار مورد نظر خود را وارد کنید.

برای مثال:

۳۰ کیلوگرم

از این مقدار به بعد، روش‌های ارسال عادی حذف خواهند شد.

ویرایش پیام

متن پیام نمایش داده‌شده به مشتری نیز از همین بخش قابل تغییر است.

این امکان باعث می‌شود برای شرایط مختلف فروشگاه نیازی به تغییر کد PHP نداشته باشید.

چه فروشگاه‌هایی می‌توانند از این کد استفاده کنند؟

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

برای مثال:

  • فروشگاه برنج و محصولات غذایی
  • فروشگاه محصولات عمده
  • فروشگاه کالاهای حجیم
  • فروشگاه تجهیزات و لوازم سنگین
  • فروشگاه هایی که برای سفارش‌های سنگین از باربری استفاده می‌کنند
  • فروشگاه‌هایی که هزینه باربری ثابت ندارند

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

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

این روش چند مزیت مهم دارد:

  • جلوگیری از انتخاب اشتباه روش ارسال
  • جلوگیری از انتخاب تیپاکس یا پست برای سفارش های سنگین
  • امکان تعیین حد وزن از پنل مدیریت
  • عدم نیاز به ساخت Shipping Method جدید
  • عدم نیاز به تعیین هزینه ثابت برای باربری
  • امکان نمایش پیام اختصاصی به مشتری
  • امکان نمایش وزن واقعی سبد خرید
  • امکان ویرایش متن پیام بدون تغییر کد
  • پشتیبانی از سفارش‌های دارای چند محصول
  • مناسب برای فروشگاه‌های فروش محصولات سنگین

آیا این کد هزینه ارسال را محاسبه می‌کند؟

خیر.

وظیفه این کد فقط تشخیص سفارش سنگین، حذف روش های ارسال عادی و نمایش پیام اطلاع‌رسانی است.

بنابراین نباید انتظار داشت که هزینه باربری را بر اساس شهر یا وزن محاسبه کند.

اگر فروشگاه شما به یک سیستم محاسبه آنلاین هزینه باربری نیاز دارد، باید از یک سیستم حمل و نقل یا Shipping Method اختصاصی استفاده شود.

آیا می‌توان فقط تیپاکس را حذف کرد؟

این کد برای چنین هدفی طراحی نشده است.

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

این تصمیم عمدی است؛ زیرا هدف اصلی این راهکار این است که برای سفارش‌های سنگین هیچ روش ارسال عادی در اختیار مشتری قرار نگیرد.

در نتیجه، فروشنده می‌تواند پس از ثبت سفارش، هماهنگی لازم برای ارسال باربری را انجام دهد.

قبل از استفاده چه چیزی را بررسی کنیم؟

بعد از نصب کد بهتر است حتماً آن را با یک سفارش آزمایشی بررسی کنید.

ابتدا یک محصول با وزن مشخص به سبد اضافه کنید و مطمئن شوید که در وزن کمتر از حد تعیین شده، روش های ارسال عادی نمایش داده می‌شوند.

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

در این حالت باید روش‌های ارسال عادی حذف شده و پیام باربری نمایش داده شود.

همچنین پیشنهاد می‌شود دقیقاً مقدار مرزی را نیز تست کنید.

برای مثال اگر حد روی ۳۰ کیلوگرم است، این سه حالت را بررسی کنید:

  • ۲۹.۹ کیلوگرم
  • ۳۰ کیلوگرم
  • ۳۰.۱ کیلوگرم

با این آزمایش می‌توانید مطمئن شوید که منطق محدودیت وزن مطابق نیاز فروشگاه شما عمل می‌کند.

نکته مهم درباره حد وزن

در این کد، حد تعیین شده به صورت برابر یا بیشتر بررسی می‌شود.

بنابراین اگر مقدار حد روی ۳۰ کیلوگرم باشد:

وزن کمتر از ۳۰ کیلوگرم: ارسال عادی

وزن برابر با ۳۰ کیلوگرم: ارسال باربری

وزن بیشتر از ۳۰ کیلوگرم: ارسال باربری

اگر سیاست فروشگاه شما این است که سفارش دقیقاً ۳۰ کیلوگرمی همچنان با روش معمول ارسال شود، منطق شرط باید تغییر کند.

سوالات متداول

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

بله. این کد برای سفارش‌هایی که به حد وزنی تعیین‌شده رسیده‌اند، تمام روش‌های ارسال عادی را حذف می‌کند؛ بنابراین تیپاکس نیز در این شرایط قابل انتخاب نخواهد بود.

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

خیر. باربری به عنوان Shipping Method ثبت نمی‌شود و فقط پیام سفارشی به مشتری نمایش داده می‌شود.

بله. متن پیام از بخش تنظیمات کد قابل ویرایش است و می‌توانید شرایط پرداخت هزینه، پس‌کرایه یا سایر توضیحات را در آن وارد کنید.

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

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

جمع‌بندی

اگر در فروشگاه ووکامرسی خود محصولات سنگین می‌فروشید و نمی‌خواهید سفارش‌های سنگین با روش‌هایی مانند پست یا تیپاکس ارسال شوند، می‌توانید از محدودیت وزن برای ارسال باربری در ووکامرس استفاده کنید.

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

این روش به‌خصوص برای فروشگاه‌هایی کاربردی است که هزینه باربری ثابت نیست و شرایط ارسال سفارش‌های سنگین باید پس از ثبت سفارش یا به صورت جداگانه با مشتری هماهنگ شود.