用户选择自定义属性(责任和小时数)后,我会尝试将自定义商店页面重定向到购物车页面,然后点击购买按钮。
我编写了自定义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无法通过我的网址获取属性值。
任何人都可以解释为什么会发生这种情况,如果有错误又是什么?
答案 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的回答。