我试图操纵购物车中的计算价格,但没有成功。。。我希望有人能在这里帮助我。
我找到了这篇文章,并实现了页面上写的代码,这与我搜索的98%完全一样。如果价格类型是每100克,我需要添加一个购物车计算。
这就是实际的工作代码:
add_filter( 'woocommerce_get_price_html', 'wb_change_product_html', 10, 2 );
// Adding a custom field to the price markup
function wb_change_product_html( $price, $product ) {
//$wb_price_type = get_field('product_price_type');
$wb_price_type = get_post_meta( $product->get_id(), 'product_price_type', true);
if($wb_price_type) {
$price_html = '<span class="amount">' . $price . ' ' . $wb_price_type . '</span>';
}
else {
$price_html = '<span class="amount">' . $price . '</span>';
}
return $price_html;
}
add_filter( 'woocommerce_cart_item_price', 'wb_change_product_price_cart', 10, 3 );
// Adding a custom field to the price in the cart
function wb_change_product_price_cart( $price, $cart_item, $cart_item_key ) {
//$wb_price_type = get_field( 'product_price_type', $cart_item['product_id'] );
$wb_price_type = get_post_meta( $cart_item['product_id'], 'product_price_type', true );
if ($wb_price_type) {
$price = $price . ' ' . $wb_price_type;
}
else {
$price = $price;
}
return $price;
}
add_filter( 'woocommerce_checkout_cart_item_quantity', 'wb_checkout_review', 10, 3 );
// Adding a custom field to the price in the checkout items
function wb_checkout_review ( $quantity, $cart_item, $cart_item_key ) {
//$wb_price_type = get_field( 'product_price_type', $cart_item['product_id'] );
$wb_price_type = get_post_meta( $cart_item['product_id'], 'product_price_type', true);
if ( $wb_price_type ) {
$cart_item = ' ' . sprintf( '× %s ', $cart_item['quantity'] ) . $wb_price_type . '';
}
else {
$cart_item = ' ' . sprintf( '× %s', $cart_item['quantity'] ) . '';
}
return $cart_item;
}
嗯,我认为它真的很容易计算,所以我做了这样的事情:
add_filter( 'woocommerce_cart_item_price', 'wb_change_product_price_cart', 10, 3 );
// Adding a custom field to the price in the cart
function wb_change_product_price_cart( $price, $cart_item, $cart_item_key ) {
//$wb_price_type = get_field( 'product_price_type', $cart_item['product_id'] );
$wb_price_type = get_post_meta( $cart_item['product_id'], 'product_price_type', true );
if ($wb_price_type) {
if ($wb_price_type == "per 100g") {
$price = $price / 100 . ' ' . $wb_price_type;
}
else {
$price = $price . ' ' . $wb_price_type;
}
}
else {
$price = $price;
}
return $price;
}
但这没用。。。我也试图直接操纵价格,但我随时都会得到价格的0。。。
所以我在谷歌上搜索了更多,找到了这篇文章,这篇文章最终正是我想要的。在最后一个打印屏幕中,我们可以看到价格将显示为每公斤(这完全没有问题(,在计算中,它使用了另一个价格(我尝试使用上面的代码(。
我认为问题在于$price具有例如";20$";这是一个字符串,我不能用它来计算。拆分这个字符串是没有意义的,应该有其他方法。
为了更好地理解这里的图片。在上半部分,我们看到了工作计算(这很好(,但这并不是我所需要的。在下面的部分中,我们看到它只会根据计算出的价格(右侧(进行计算。下行部分的左侧保持正确的价格。
我认为问题在于$price的值为"20$";这是一个字符串,我不能用它来计算。拆分这个字符串是没有意义的,应该有其他方法。
这是真的,它实际上是一个完整的html字符串。尝试更改woococommerce_cart_item_price过滤器以获取字符串中的价格:
add_filter('woocommerce_cart_item_price', 'wb_change_product_price_cart', 10, 3);
// Adding a custom field to the price in the cart
function wb_change_product_price_cart($price, $cart_item, $cart_item_key)
{
$wb_price_type = get_post_meta($cart_item['product_id'], 'product_price_type', true);
if ($wb_price_type) {
if ($wb_price_type == "per 100g") {
preg_match("/([0-9]+.[0-9]+)/", $price, $matches);
$_price = $matches[0];
$per100 = $_price / 100;
$price = $per100 . ' ' . $wb_price_type;
} else {
$price = $price . ' ' . $wb_price_type;
}
} else {
$price = $price;
}
return $price;
}