在WooCommerce中将变量产品的自定义属性添加到购物车

时间:2017-10-06 07:20:00

标签: php wordpress woocommerce attributes cart

用户选择自定义属性(责任和小时数)后,我会尝试将自定义商店页面重定向到购物车页面,然后点击购买按钮。

我编写了自定义JS代码,用于检索variation_id和属性值并将其附加到URL,以便自动添加到购物车并重定向到购物车页面。

href="yourdomain.com/?add-to-cart=47&variation_id=88&quantity=3&attribute_pa_colour=blue&attribute_pa_size=m"

这是我在博客中找到的网址格式:(https://businessbloomer.com/woocommerce-custom-add-cart-urls-ultimate-guide/)我以此格式创建了我的链接。

我的链接是:

localhost/wordpress/cart/?add-to-cart=1185&variation_id=1641&quantity=1&attribute_pa_liability=2_million&attribute_pa_hours=500_hours

责任和小时数是我的自定义属性,其值分别为100万,200万和500小时,750小时。

但当它被重定向到购物车页面时,woocommerce会给我一个错误,并显示它的警告框,其中显示错误消息为&#34;责任和小时数是必填字段&#34;。< / p>

我认为woocommerce无法通过我的网址获取属性值。

任何人都可以解释为什么会发生这种情况,如果有错误又是什么?

3 个答案:

答案 0 :(得分:1)

已更新

这个&#34; Business Bloomer&#34;指南有点过时......你需要两件事:

1)。正确的网址

您不需要添加产品和变体ID以及所有相关属性。您只需将变体ID +自定义属性添加到购物车中,如下所示:localhost/wordpress/cart/?add-to-cart=1641&quantity=1&pa_liability=2_million&pa_hours=500_hours

2)。注册(并显示)您的自定义属性:

// Store the custom data to cart object
add_filter( 'woocommerce_add_cart_item_data', 'save_custom_product_data', 10, 2 );
function save_custom_product_data( $cart_item_data, $product_id ) {
    $bool = false;
    $data = array();
    if( isset( $_REQUEST['pa_liability'] ) ) {
        $cart_item_data['custom_data']['pa_liability'] = $_REQUEST['pa_liability'];
        $data['pa_liability'] = $_REQUEST['pa_liability'];
        $bool = true;
    }
    if( isset( $_REQUEST['pa_hours'] ) ) {
        $cart_item_data['custom_data']['pa_hours'] = $_REQUEST['pa_hours'];
        $data['pa_hours'] = $_REQUEST['pa_hours'];
        $bool = true;
    }
    if( $bool ) {
        // below statement make sure every add to cart action as unique line item
        $cart_item_data['custom_data']['unique_key'] = md5( microtime().rand() );
        WC()->session->set( 'custom_variations', $data );
    }
    return $cart_item_data;
}

// Displaying the custom attributes in cart and checkout items
add_filter( 'woocommerce_get_item_data', 'customizing_cart_item_data', 10, 2 );
function customizing_cart_item_data( $cart_data, $cart_item ) {
    $custom_items = array();
    if( ! empty( $cart_data ) ) $custom_items = $cart_data;

    // Get the data (custom attributes) and set them
    if( ! empty( $cart_item['custom_data']['pa_liability'] ) )
        $custom_items[] = array(
            'name'      => 'pa_liability',
            'value'     => $cart_item['custom_data']['pa_liability'],
        );
    if( ! empty( $cart_item['custom_data']['pa_hours'] ) )
        $custom_items[] = array(
            'name'      => 'pa_hours',
            'value'     => $cart_item['custom_data']['pa_hours'],
        );
    return $custom_items;
}

代码放在活动子主题(或主题)的function.php文件中,或者放在任何插件文件中。

经过测试和工作

  

您还需要将此数据添加到订单商品

答案 1 :(得分:0)

首先从管理面板取消选中ajax add to cart选项 然后你需要对你的属性进行变化,然后找出产品ID,数量,属性slug和属性名称(用于显示在购物车中)和变体ID,然后制作你的购物车网址,如下所示。

带有属性的“添加到购物车”链接为: https://www.your-domain.com/?add-to-cart=(product id)&amp; quantity =(数字数量)&amp; attribute_pa_(属性slug)=(属性名称)&amp; variation_id =(变体ID)

有关详细信息,请访问http://www.codemystery.com/wordpress-woocommerce-add-cart-link-variations/

答案 2 :(得分:0)

关于添加到购物车网址格式的其他答案是正确的(应该是:/ add-to-cart = product_id&my_custom_attr = whatever&my_custom_attr2 = somthing)

然后有一个非常好的插件来处理这种类型的功能,用于存储称为WC Fields Factory的自定义产品属性。 插件的作者也有一个great article,以了解如何执行此操作而无需插件。以及对类似问题here的回答。