woocommerce_package_rates适用于登录用户

时间:2018-07-07 08:58:30

标签: wordpress woocommerce

woocommerce_package_rates适用于登录用户。 如果用户在购物车中添加产品,则转到购物车不会显示运送。 购物车后,如果他继续结帐,则显示新的运输显示。如果也显示返回购物车。

   add_filter('woocommerce_package_rates','dif_shipping',100,2);
function dif_shipping($rates,$package) {
global $wpdb;
$sqlQ = 'SELECT * FROM wp_options WHERE option_name="min_amount"';
$dataS = $wpdb->get_row( $sqlQ , ARRAY_A );  
$minorder= $dataS['option_value']+2.9; 
$pr=WC()->cart->subtotal;
if($pr<$dataS['option_value'] and empty(WC()->cart->applied_coupons))
{
$ost=$minorder - $pr;
if($ost>0)
{
$newost=$ost; 
$newcost = $newost;
$newtax = $newost * (9.09/100);
$newcost= $newcost - $newtax;
}
foreach( $rates as $rate_key => $rate ){
if( $rate->method_id != 'flat_rate:4'){

$rates[$rate_key]->cost = $newcost;
$taxes = array();
foreach ($rates[$rate_key]->taxes as $key => $tax){
if( $rates[$rate_key]->taxes[$key] > 0 )
$taxes[$key] = $newtax;
}
$rates[$rate_key]->taxes = $taxes;
$w=$ost-2.90;
$rates[$rate_key]->label = 'Lieferkosten 2,90€ + Differenz zum Mindestbestellwert '.number_format($w, 2, ',', ' ').'€';
}
}    
}
else
{
foreach( $rates as $rate_key => $rate ){
if( $rate->method_id != 'flat_rate:4'){
$rates[$rate_key]->label = 'Lieferkosten';
}
}          
}
return $rates;
}  

但是它仅在用户登录后才有效。 有什么建议吗?

1 个答案:

答案 0 :(得分:0)

首先在代码中,而不是使用WPDB SQL查询,您最好使用专用的WordPress get_option()函数:

$minorder = get_option('min_amount') + 2.9;

现在由于购物车页面中与未登录用户有关的问题,这是完全正常的,因为客户应使用货运计算器来定义他的国家(邮政编码)。 ..
因此,当客户结帐时,该国家/地区会自动填充为地理位置所在的国家/地区。这就是运输显示的原因。如果他们返回购物车页面,则已经检测到并设置了国家(从结帐页面)…

这是正常过程,具体取决于您的设置和自定义代码。