WooCommerce-如何将自定义字段添加到购物车项目和购物车总计

时间:2014-01-26 作者:tonyf

我正在使用WooCommerce插件,并有以下查询:

在“单一产品”页面中,我有一个产品,根据买家的某些选择,计算出运输成本值,然后我需要在查看购物车时将其作为购物车项目的一部分传递/包含为新列“运输成本”。

但问题是,在按下“添加到购物车”按钮三次后,买家可能会决定购买三种不同的产品,其中这三种产品的运费计算可能各不相同。

例如:

Product A selections calculates a Shipping Cost of $2.00
Product B selections calculates a Shipping Cost of $4.00
Product C selections calculates a Shipping Cost of $6.00
因此,基于上述情况,当买家完成购物并按下“查看购物车”时,我希望他们看到:

Item                       Price      Shipping Cost      Quantity          Total     
---------------------------------------------------------------------------------------
Product A                      $10        $2                     1                 $10
Product B                      $5         $4                     1                 $5
Product C                      $15        $6                     1                 $15
这是我想添加到购物车中的“运费”自定义字段列,这是我不确定如何做的。

除此之外,我还想在下面的“Cart Totals”中添加另一个自定义字段“Shipping Cost”,总计12美元,然后将其添加到总体产品总计中,即。

Cart Totals

Cart Subtotal       $30
Shipping Cost       $12

Order Total         $42
我用于购物车总运费的一些代码是:

function woo_add_cart_fee() {
  global $woocommerce;
  $woocommerce->cart->add_fee( __(\'Shipping Cost\', \'woocommerce\'), 100 );
}
add_action( \'woocommerce_before_calculate_totals\', \'woo_add_cart_fee\');
因此,我需要知道如何将“运费”添加到购物车产品详细信息以及购物车总计中。

任何编码帮助都将不胜感激。

谢谢

1 个回复
SO网友:passatgt

首先,在编辑产品时存储自定义字段。假设您正在使用custom\\u shipping\\u cost custom字段。确保其存储为数字,例如20,而不是20.00美元

然后,您需要在购物车页面上显示此字段。遗憾的是,没有用于在cart表中添加新列的筛选器,因此您需要编辑模板文件,或者如果不要求它是列,您可以改为这样做,此代码将向最后一列添加额外值:

add_filter(\'woocommerce_cart_item_subtotal\',\'additional_shipping_cost\',10,3);
function additional_shipping_cost($subtotal, $values, $cart_item_key) {
    //Get the custom field value
    $custom_shipping_cost = get_post_meta($post->ID, \'custom_shipping_cost\', true);

    //Just for testing, you can remove this line
    $custom_shipping_cost = 10;

    //Check if we have a custom shipping cost, if so, display it below the item price
    if ($custom_shipping_cost) {
        return $subtotal.\'<br>+\'.woocommerce_price($custom_shipping_cost).\' Shipping Cost\';
    } else {
        return $subtotal;   
    }
}
这样,问题的第一部分就完成了。如果您想像上面的示例那样显示它,那么需要复制插件/woocommerce/模板/购物车/购物车。php文件到themes/yourtheme/woomerce/cart/cart。php。然后编辑文件,添加您自己的列,您可以使用上面的代码显示价格。

之后,我们需要用额外成本更新购物车总计。您的代码和add\\u费用很方便:

function woo_add_cart_fee() {
    global $woocommerce;

    $extra_shipping_cost = 0;
    //Loop through the cart to find out the extra costs
    foreach ( $woocommerce->cart->get_cart() as $cart_item_key => $values ) {
        //Get the product info
        $_product = $values[\'data\'];

        //Get the custom field value
        $custom_shipping_cost = get_post_meta($_product->id, \'custom_shipping_cost\', true);

        //Just for testing, you can remove this line
        $custom_shipping_cost = 10;

        //Adding together the extra costs
        $extra_shipping_cost = $extra_shipping_cost + $custom_shipping_cost;
    }

    //Lets check if we actually have a fee, then add it
    if ($extra_shipping_cost) {
        $woocommerce->cart->add_fee( __(\'Shipping Cost\', \'woocommerce\'), $extra_shipping_cost );
    }
}
add_action( \'woocommerce_before_calculate_totals\', \'woo_add_cart_fee\');
就是这样,这之后应该会起作用。确保删除仅用于测试的。。。这两个代码中的行,我没有在我的站点上创建用于测试的自定义字段。

结束

相关推荐

意外删除了wp_options数据库表的active_plugins部分

好吧,所以我很确定我在这里完蛋了,因为我没有数据库备份,但我想我还是问问以防万一。在PhpMyAdmin中,我的意思是只需转到wp\\u options表并清空该表中的active\\u plugins部分,因为插件错误而无法登录。我点击了删除按钮,而不是清空它。是否有任何方法可以手动添加此表的active\\u插件部分?我尝试了修复数据库的方法,但没有成功。