在 WooCommerce 中显示免费送货和送货信息之前还剩多少
Display how much is left before free shipping and Delivery Information in WooCommerce
基于此回答:,我收到了一条基于特定运输条件的运输消息。
现在我意识到我需要在 WooCommerce 中设置免费送货方式并这样做,我需要告知客户在免费送货之前还剩多少。
所以,我找到了这段代码:
$total_cart = WC()->cart->total;
$limit_for_free_shipping = 99;
if ($total_cart != 0 && $total_cart < $limit_free_shipping ) {
$difference = wc_price( round($limit_for_free_shipping - $total_cart, 2) );
?>
<p class="spend_message" >
<img src="<?php echo get_stylesheet_directory_uri(); ?>/images/shipping-icon.png"> <?php _e('If you spend another '); ?> <?php echo $diff; ?> <?php _e(', you will get '); ?> <strong><?php _e('FREE SHIPPING!'); ?></strong>
</p>
<?php
}
但是我无法将此消息与其他消息合并并将其转换为 <p>
标记而不是 wc-notice
。
非常感谢任何帮助。
以下将把这两个功能合而为一:
add_action( 'woocommerce_before_customer_login_form', 'next_day_delivery' );
add_action( 'woocommerce_before_customer_login_form', 'next_day_delivery' );
add_action( 'woocommerce_before_checkout_form', 'next_day_delivery' );
add_action( 'woocommerce_before_shop_loop', 'next_day_delivery' );
add_action( 'woocommerce_before_single_product_summary', 'next_day_delivery' );
add_action( 'woocommerce_before_cart', 'next_day_delivery' );
function next_day_delivery() {
if( WC()->cart->is_empty() )
return; // Exit
// Set the time zone
date_default_timezone_set('Europe/Stockholm');
// From Monday to Thursday
$is_week_days = in_array( date('w'), array( 1, 2, 3, 4 ) ) ? true : false;
$end_time = mktime('12', '00', '00', date('m'), date('d'), date('Y'));
$now_time = time();
$after_tomorow = date('l', strtotime('+2 days'));
$dateDiff = intval(($end_time - $now_time)/60);
$diff_hours = intval($dateDiff/60);
$diff_minutes = $dateDiff%60;
$hours_label = _n( 'hour', 'hours', $diff_hours, 'wooocommerce' );
$minutes_label = _n( 'minute', 'minutes', $diff_minutes, 'wooocommerce' );
$minutes_displ = $diff_minutes.' '.$minutes_label;
$hours_display = $diff_hours.' '.$hours_label.' and ';
$remain_time = $diff_hours > 0 ? $hours_display . $minutes_displ : $minutes_displ;
$cart_total = WC()->cart->total;
$limit_free = 100; // Starting freee shipping amount
$free_shipping = ''; // Initialising
if ( $cart_total < $limit_free ) {
$free_shipping = sprintf(
__('%s If you spend another %s you will get %s', 'woocommerce' ),
'', // ' <img src="' . get_stylesheet_directory_uri() . '/images/shipping-icon.png"> ',
strip_tags( wc_price( round( $limit_free - $cart_total, 2 ) ) ),
'<strong>' . __( 'FREE SHIPPING!', 'woocommerce' ) . '</strong>'
);
} elseif ( $cart_total >= $limit_free ) {
$free_shipping = '<strong>' . __( ' You get FREE SHIPPING!', 'woocommerce' ) . '</strong>';
}
if ( $end_time > $now_time && $is_week_days ) {
// print the information notice
$message = sprintf( __( '%s left to be delivered tomorrow! %s', 'woocommerce' ), $remain_time, $free_shipping );
}
elseif ( $end_time <= $now_time && $is_week_days ) {
$message = sprintf( __( 'Your order will be delivered this %s. %s', 'woocommerce' ), $after_tomorow, $free_shipping );
} else {
$message = __( 'Your order will be prepared and shipped next upcoming monday and delivered on tuesday.', 'woocommerce' ) . $free_shipping;
}
wc_print_notice( $message, 'success' );
}
代码进入您的活动子主题(或活动主题)的 function.php 文件。已测试并有效。
更新: 删除小时数为零:
To use a <p class="my-custom>
html tag instead of using the Woocommerce notice structure, replace:
wc_print_notice( $message, 'success' );
by:
echo '<p class="my-custom>' . $message . '</p>';
You are done…
基于此回答:
现在我意识到我需要在 WooCommerce 中设置免费送货方式并这样做,我需要告知客户在免费送货之前还剩多少。
所以,我找到了这段代码:
$total_cart = WC()->cart->total;
$limit_for_free_shipping = 99;
if ($total_cart != 0 && $total_cart < $limit_free_shipping ) {
$difference = wc_price( round($limit_for_free_shipping - $total_cart, 2) );
?>
<p class="spend_message" >
<img src="<?php echo get_stylesheet_directory_uri(); ?>/images/shipping-icon.png"> <?php _e('If you spend another '); ?> <?php echo $diff; ?> <?php _e(', you will get '); ?> <strong><?php _e('FREE SHIPPING!'); ?></strong>
</p>
<?php
}
但是我无法将此消息与其他消息合并并将其转换为 <p>
标记而不是 wc-notice
。
非常感谢任何帮助。
以下将把这两个功能合而为一:
add_action( 'woocommerce_before_customer_login_form', 'next_day_delivery' );
add_action( 'woocommerce_before_customer_login_form', 'next_day_delivery' );
add_action( 'woocommerce_before_checkout_form', 'next_day_delivery' );
add_action( 'woocommerce_before_shop_loop', 'next_day_delivery' );
add_action( 'woocommerce_before_single_product_summary', 'next_day_delivery' );
add_action( 'woocommerce_before_cart', 'next_day_delivery' );
function next_day_delivery() {
if( WC()->cart->is_empty() )
return; // Exit
// Set the time zone
date_default_timezone_set('Europe/Stockholm');
// From Monday to Thursday
$is_week_days = in_array( date('w'), array( 1, 2, 3, 4 ) ) ? true : false;
$end_time = mktime('12', '00', '00', date('m'), date('d'), date('Y'));
$now_time = time();
$after_tomorow = date('l', strtotime('+2 days'));
$dateDiff = intval(($end_time - $now_time)/60);
$diff_hours = intval($dateDiff/60);
$diff_minutes = $dateDiff%60;
$hours_label = _n( 'hour', 'hours', $diff_hours, 'wooocommerce' );
$minutes_label = _n( 'minute', 'minutes', $diff_minutes, 'wooocommerce' );
$minutes_displ = $diff_minutes.' '.$minutes_label;
$hours_display = $diff_hours.' '.$hours_label.' and ';
$remain_time = $diff_hours > 0 ? $hours_display . $minutes_displ : $minutes_displ;
$cart_total = WC()->cart->total;
$limit_free = 100; // Starting freee shipping amount
$free_shipping = ''; // Initialising
if ( $cart_total < $limit_free ) {
$free_shipping = sprintf(
__('%s If you spend another %s you will get %s', 'woocommerce' ),
'', // ' <img src="' . get_stylesheet_directory_uri() . '/images/shipping-icon.png"> ',
strip_tags( wc_price( round( $limit_free - $cart_total, 2 ) ) ),
'<strong>' . __( 'FREE SHIPPING!', 'woocommerce' ) . '</strong>'
);
} elseif ( $cart_total >= $limit_free ) {
$free_shipping = '<strong>' . __( ' You get FREE SHIPPING!', 'woocommerce' ) . '</strong>';
}
if ( $end_time > $now_time && $is_week_days ) {
// print the information notice
$message = sprintf( __( '%s left to be delivered tomorrow! %s', 'woocommerce' ), $remain_time, $free_shipping );
}
elseif ( $end_time <= $now_time && $is_week_days ) {
$message = sprintf( __( 'Your order will be delivered this %s. %s', 'woocommerce' ), $after_tomorow, $free_shipping );
} else {
$message = __( 'Your order will be prepared and shipped next upcoming monday and delivered on tuesday.', 'woocommerce' ) . $free_shipping;
}
wc_print_notice( $message, 'success' );
}
代码进入您的活动子主题(或活动主题)的 function.php 文件。已测试并有效。
更新: 删除小时数为零:
To use a
<p class="my-custom>
html tag instead of using the Woocommerce notice structure, replace:wc_print_notice( $message, 'success' );
by:
echo '<p class="my-custom>' . $message . '</p>';
You are done…