Я создал фиктивный Wordpress веб-сайт, просто с помощью плагина WooCommerce.

У меня также есть один фиктивный продукт: "Cool Watch".

Моя цель очень проста. После того, как пользователь добавляет один "Cool Watch" в корзину. Я хочу change его shipping total на любой custom value, например: 67,89 долларов США.

Что мне нужно сделать, чтобы получить это programmatically?

А пока я получаю: Shipping total: Free!

Здесь я дам вам некоторую справочную информацию о текущей ситуации:

Наличие одной "Прохладной вахты" на моей корзине.

С этим кодом:

<?
if (!function_exists("echoc")) {
    function echoc($data) {
        echo "\n<pre>\n";
        print_r($data);
        echo "</pre>\n";
    }
}

$cart_items = $woocommerce->cart->get_cart();
echoc($cart_items);

$shipping_total = $woocommerce->cart->get_cart_shipping_total();
echoc("Shipping total: ".$shipping_total);

?>

Я получаю это:

Array
(
    [c74d97b01eae257e44aa9d5bade97baf] => Array
        (
            [product_id] => 16
            [variation_id] => 0
            [variation] => Array
                (
                )

            [quantity] => 1
            [line_total] => 50
            [line_tax] => 3.075
            [line_subtotal] => 50
            [line_subtotal_tax] => 3.075
            [line_tax_data] => Array
                (
                    [total] => Array
                        (
                            [1] => 3.075
                        )

                    [subtotal] => Array
                        (
                            [1] => 3.075
                        )

                )

            [data] => WC_Product_Simple Object
                (
                    [id] => 16
                    [post] => WP_Post Object
                        (
                            [ID] => 16
                            [post_author] => 1
                            [post_date] => 2017-03-23 15:05:00
                            [post_date_gmt] => 2017-03-23 15:05:00
                            [post_content] => This is a very cool Watch!
                            [post_title] => Cool Watch
                            [post_excerpt] => 
                            [post_status] => publish
                            [comment_status] => open
                            [ping_status] => closed
                            [post_password] => 
                            [post_name] => cool-watch
                            [to_ping] => 
                            [pinged] => 
                            [post_modified] => 2017-03-23 10:09:35
                            [post_modified_gmt] => 2017-03-23 15:09:35
                            [post_content_filtered] => 
                            [post_parent] => 0
                            [guid] => http://dummy.development.lagoon.com/?post_type=product&p=16
                            [menu_order] => 0
                            [post_type] => product
                            [post_mime_type] => 
                            [comment_count] => 0
                            [filter] => raw
                        )

                    [product_type] => simple
                    [shipping_class:protected] => 
                    [shipping_class_id:protected] => 0
                    [total_stock] => 
                    [supports:protected] => Array
                        (
                            [0] => ajax_add_to_cart
                        )

                    [price] => 50.00
                )

        )

)

Shipping total: Free!
0
Angel 23 Мар 2017 в 18:58

2 ответа

Лучший ответ

Эй, это должно сделать это:

$cart = $woocommerce->cart ;
$cart->shipping_total = "what ever u want"

Shipping_total является публичной собственностью Cart Class https://docs.woocommerce.com/wc-apidocs/class-WC_Cart. HTML

2
enno.void 23 Мар 2017 в 16:08
add_action('woocommerce_calculate_totals', 'calculate_totals', 10, 1);

function calculate_totals($totals){
//your code
// return your own value
}
0
Alice 24 Мар 2017 в 07:13