Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/237.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 还可以根据产品自定义字段更改WooCommerce微型购物车项目价格_Php_Wordpress_Woocommerce_Custom Fields_Minicart - Fatal编程技术网

Php 还可以根据产品自定义字段更改WooCommerce微型购物车项目价格

Php 还可以根据产品自定义字段更改WooCommerce微型购物车项目价格,php,wordpress,woocommerce,custom-fields,minicart,Php,Wordpress,Woocommerce,Custom Fields,Minicart,基于,这回答了我最初的问题-我只剩下一个关于WooCommerce迷你车的小问题 产品价格不会根据客户使用giftcard字段提交的内容进行相应更新。所以我有两种不同的解决方案,它们都失败了 这就是我所尝试的: add_filter('woocommerce_widget_cart_item_quantity', 'custom_wc_widget_cart_item_quantity', 10, 3 ); function custom_wc_widget_cart_item_quantity

基于,这回答了我最初的问题-我只剩下一个关于WooCommerce迷你车的小问题

产品价格不会根据客户使用giftcard字段提交的内容进行相应更新。所以我有两种不同的解决方案,它们都失败了

这就是我所尝试的:

add_filter('woocommerce_widget_cart_item_quantity', 'custom_wc_widget_cart_item_quantity', 10, 3 );
function custom_wc_widget_cart_item_quantity( $cart, $cart_item, $cart_item_key ) {

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

        if ( isset ( $cart_item['giftcard_product_price'] ) ) {

        $cart_item['data']->set_price( $cart_item['giftcard_product_price'] );

        return sprintf( '<span class="quantity">%s &times; <span class="woocommerce-Price-amount amount">%s <span class="woocommerce-Price-currencySymbol">%s</span></span></span>', $cart_item['quantity'], $cart_item['giftcard_product_price'] );
        }
    }
}

如果我能得到任何帮助,我将不胜感激。

正确使用的钩子是
woocommerce\u cart\u item\u price

add_filter( 'woocommerce_cart_item_price', 'giftcard_cart_item_price', 10, 3 );
function giftcard_cart_item_price( $price_html, $cart_item, $cart_item_key ) {
    $giftcard_key = 'giftcard_product_price';

    if( isset( $cart_item[$giftcard_key] ) ) {
        $args = array( 'price' => floatval( $cart_item[$giftcard_key] ) );

        if ( WC()->cart->display_prices_including_tax() ) {
            $product_price = wc_get_price_including_tax( $cart_item['data'], $args );
        } else {
            $product_price = wc_get_price_excluding_tax( $cart_item['data'], $args );
        }
        return wc_price( $product_price );
    }
    return $price_html;
}

现在,自定义价格将正确显示在微型购物车中…

可变产品篮子中免费价格的完整变体

/**
 * Initialize Session cart
 */
add_action('init', 'init_cart_session', 1);
function init_cart_session() {
    if (!session_id()) {
        session_start();
    }
    if (!isset($_SESSION['cart'])) {
        $_SESSION['cart'] = [];
    }
}

/**
 * Custom size correct
 */
add_action('woocommerce_before_calculate_totals', 'woo_size_correct', 10, 6);
function woo_size_correct() {
    global $woocommerce;

    if (isset($_POST['attribute_pa_size']) && $_POST['attribute_pa_size'] == 'custom') 
{
        $_SESSION['cart'][$_POST['variation_id']] = $_POST['custom'];
    }

    foreach (WC()->cart->get_cart() as $cart_item_key => $cart_item) {
        if (array_key_exists($cart_item['data']->variation_id, $_SESSION['cart'])) {
            $cart_item['data']->set_price($_SESSION['cart'][$cart_item['data']->variation_id]);
        }
    }
}
add_filter('woocommerce_cart_item_price', 'woo_size_mini_cart_correct', 10, 6);
function woo_size_mini_cart_correct($price_html, $cart_item, $cart_item_key) {
    global $woocommerce;

    if (array_key_exists($cart_item['data']->variation_id, $_SESSION['cart'])) {
        $args = array('price' => floatval($_SESSION['cart'][$cart_item['data']->variation_id]));

        if (WC()->cart->display_prices_including_tax()) {
            $product_price = wc_get_price_including_tax($cart_item['data'], $args);
        } else {
            $product_price = wc_get_price_excluding_tax($cart_item['data'], $args);
        }
        return wc_price($product_price);
    }
    return $price_html;
}
/**
 * Initialize Session cart
 */
add_action('init', 'init_cart_session', 1);
function init_cart_session() {
    if (!session_id()) {
        session_start();
    }
    if (!isset($_SESSION['cart'])) {
        $_SESSION['cart'] = [];
    }
}

/**
 * Custom size correct
 */
add_action('woocommerce_before_calculate_totals', 'woo_size_correct', 10, 6);
function woo_size_correct() {
    global $woocommerce;

    if (isset($_POST['attribute_pa_size']) && $_POST['attribute_pa_size'] == 'custom') 
{
        $_SESSION['cart'][$_POST['variation_id']] = $_POST['custom'];
    }

    foreach (WC()->cart->get_cart() as $cart_item_key => $cart_item) {
        if (array_key_exists($cart_item['data']->variation_id, $_SESSION['cart'])) {
            $cart_item['data']->set_price($_SESSION['cart'][$cart_item['data']->variation_id]);
        }
    }
}
add_filter('woocommerce_cart_item_price', 'woo_size_mini_cart_correct', 10, 6);
function woo_size_mini_cart_correct($price_html, $cart_item, $cart_item_key) {
    global $woocommerce;

    if (array_key_exists($cart_item['data']->variation_id, $_SESSION['cart'])) {
        $args = array('price' => floatval($_SESSION['cart'][$cart_item['data']->variation_id]));

        if (WC()->cart->display_prices_including_tax()) {
            $product_price = wc_get_price_including_tax($cart_item['data'], $args);
        } else {
            $product_price = wc_get_price_excluding_tax($cart_item['data'], $args);
        }
        return wc_price($product_price);
    }
    return $price_html;
}