当前位置: 首页 > 知识库问答 >
问题:

更新basket/cart页面上的basket自定义属性WooCommerce产品加载项

阴飞星
2023-03-14

因此,澄清一下,第一次提交时,没有发生任何事情,它更新产品的时间,但是它现在不更新属性,它更新数量等(当我在代码中添加值时),但不更新属性。

我已经将它设置为删除产品之后,但它丢失了属性,当我删除它,所以我已经留下了重复在那里,直到我修复了双重更新所需的更新,以更新页面!

有没有人能看到的东西能给我指明一个更快的解决方法的方向?很了解任何帮助!!!

<?php
if ( ! empty( $_POST['update_cart'] ) )  {
    $cart_totals = isset( $_POST['cart'] ) ? $_POST['cart'] : '';
    if ( sizeof( $woocommerce->cart->get_cart() ) > 0 ) {
        foreach ( $woocommerce->cart->get_cart() as $cart_item_key => $values ) {
            if ( isset( $cart_totals[ $cart_item_key ]['addons'] ) ) {
                WC()->cart->remove_cart_item($cart_item_key);
                #print_r($woocommerce->cart->cart_contents[ $cart_item_key ]['addons']);                    
                #$cart_item['addons'] = array('name' => 'Add your message', 'value' => 'testing the message box', 'price' => 0, 'field_name' => $cart_item['product_id'].'-add-your-message-1', 'field_type' => 'custom_textarea', 'price_type' => 'quantity_based' );
                $data = array('name' => 'Add your message', 'value' => 'testing the message box', 'price' => 0, 'field_name' => $cart_item['product_id'].'-add-your-message-1', 'field_type' => 'custom_textarea', 'price_type' => 'quantity_based' );
                #WC()->cart->add_to_cart($cart_item['product_id'], $cart_item['quantity'], $cart_item['variation_id'], $cart_item['addons']);
                WC()->cart->add_to_cart($cart_item['product_id'], $cart_item['quantity'], $cart_item['variation_id'], $cart_item['addons']);
                #$woocommerce->cart->cart_contents[$cart_item_key]['addons'][0]['value'] = 'test';
                $woocommerce->cart->cart_contents[$cart_item]['addons'] = $data;
                
            }
        }
    }
}

编辑:下面正在更新每个项目的消息框,这是伟大的,正是所需要的,只是试图让会话接受更新。购物车是一个多页购物车,因为这是所请求的,所以当您转到下一个页面/结帐页面时,您可以看到它已经恢复到原始消息,并且您可以在购物车会话中看到它。此外,如果您只是刷新页面,它会返回(在您已经更新了页面之后)。

我试着通过WC()->session->set编辑,但我想我设置错了!我得到了一些会话设置,但它没有设置正确的条目!

add_action('woocommerce_update_cart_action_cart_updated', function ($cartUpdated) {
    // loop through cart items, passing the $item array by reference, so it can be updated
    foreach (WC()->cart->cart_contents as $key => &$item) {
        // set the values of the addons array as required
        $test = $_POST['cart'][$key]['addons'];
        $item['addons'][0]['value'] = $test;
        print_r(WC()->session->get( 'cart'));
    }
});

编辑工作代码:谢谢@benj的解决方案,非常有帮助!会议需要设置,但不是我认为我必须做的方式!

// hook on woocommerce_update_cart_action_cart_updated
add_action('woocommerce_update_cart_action_cart_updated', function ($cartUpdated) {
    // loop through cart items, passing the $item array by reference, so it can be updated
    foreach (WC()->cart->cart_contents as $key => &$item) {
        // set the values of the addons array as required
        $addon = $_POST['cart'][$key]['addons'];
        $item['addons'][0]['value'] = $addon;
        // set the session
        WC()->cart->set_session();
    }
});

共有1个答案

拓拔弘亮
2023-03-14

如果我正确理解您的问题,您希望在更新购物车时更新每个产品上的一个addon字段。

这可以通过在woocommerce_update_cart_action_cart_updated上添加一个钩子并根据需要编辑购物车项来实现。

// hook on woocommerce_update_cart_action_cart_updated
add_action('woocommerce_update_cart_action_cart_updated', function ($cartUpdated) {

    // loop through cart items, passing the $item array by reference, so it can be updated
    foreach (WC()->cart->cart_contents as $key => &$item) {
        // set the values of the addons array as required
        $item['addons'][0]['value'] = 'your message here';
    }
});

如果您只希望对单个产品执行此操作,则可以在迭代它们时检查它们的其他值。

 类似资料:
  • 我试图在woocommerce中获得一个特定的自定义属性。我在这个网站上读了很多文章,其中提供了3-5种方法。在尝试了所有方法之后,对我来说唯一有效的方法就是循环所有属性——所有其他属性都不起作用。我有一个名为“pdfs”的自定义属性 以下尝试不起作用:(链接) 这是唯一的一个工作:(链接) 我更希望能够使用第一个选项之一。任何帮助都将不胜感激。谢谢

  • BasKet 是一个linux下的桌面即时贴软件。 更多的屏幕截图:http://basket.kde.org/screenshots.php

  • 当我进入产品编辑页面时,有一个选项卡“属性”。在那里我可以设置属性名及其值。 我假设这就是在Woocommerce上为产品添加自定义属性的方式。 但是如何在循环中得到这个值呢? 我看到人们使用,但它希望我传递分类法和另一个参数数组。分类学是什么?我没有手动添加。论点是什么?

  • 我使用woocommerce插件创建了一个可变产品。在变量产品中,我创建了一个自定义属性“License Duration”,其值为“3个月| 6个月| 1年|寿命”。 现在我想在一个定制的单一产品模板上显示这个属性。 我试过以下解决方法 1. 这显示了

  • 问题内容: 在Woocommerce中,我试图获取产品自定义属性值,但我失败了,我一无所获。 所以我尝试了: 我正在获取这些原始数据: 我知道有一个值,因为它显示在属性部分,但是我只是找不到一种方法来将其显示在我的自定义代码中。 问题答案: 编辑* : 自Woocommerce版本3起已弃用 * 按照@datafeedr在他的答案中写道: 甚至更紧凑: 原始答案:

  • 在WooCommerce中,我试图获得产品自定义属性值,但我失败了,什么也得不到。 所以我试着: 我得到了这些原始数据: 我知道有一个值,因为它显示在属性部分,但我就是找不到一种方法用我的自定义代码显示它。