将可变产品的自定义属性添加到 WooCommerce 中的购物车
Add Custom attributes from a variable product to cart in WooCommerce
我正在尝试在用户 select 自定义属性(责任和营业时间)之后将我的自定义商店页面重定向到购物车页面,然后单击购买按钮。
我已经编写了自定义 JS 代码来检索 variation_id 和属性值并将其附加到 URL 以便它自动添加到购物车并重定向到购物车页面。
href="yourdomain.com/?add-to-cart=47&variation_id=88&quantity=3&attribute_pa_colour=blue&attribute_pa_size=m"
这是我在博客中找到的 URL 格式:(https://businessbloomer.com/woocommerce-custom-add-cart-urls-ultimate-guide/)
我用这种格式制作了 link。
我的link是:
localhost/wordpress/cart/?add-to-cart=1185&variation_id=1641&quantity=1&attribute_pa_liability=2_million&attribute_pa_hours=500_hours
其中 liability 和 hours 是我的自定义属性,其值分别为 100 万、200 万和 500 小时、750 小时。
但是当它被重定向到购物车页面时,woocommerce 给我一个错误并显示它的警告框,其中显示错误消息为 "liability and hours are required fields"。
我认为 woocommerce 无法通过我的 URL 获取属性值。
谁能解释为什么会这样,如果有错误是什么?
已更新
这个 "Business Bloomer" 指南有点过时了……你需要两件事:
1).正确的URL
您不需要将产品和具有所有相关属性的变体 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 文件或任何插件文件。
已测试并有效
You will need to add this data to the order items too
首先取消选中管理面板中的 ajax 添加到购物车选项
然后你需要改变你的属性,然后找出产品 ID、数量、属性 slug 和属性名称(用于在购物车中显示)和变体 ID,然后使你的购物车 url 如下所示。
添加到购物车 link 的属性是:https://www.your-domain.com/?add-to-cart=(product id)&quantity=(numeric quantity)&attribute_pa_(attribute slug)=(attribute name )&variation_id=(版本号)
更多详情请访问http://www.codemystery.com/wordpress-woocommerce-add-cart-link-variations/
关于添加到购物车 url 格式的其他答案是正确的(应该是:/add-to-cart=product_id&my_custom_attr=whatever&my_custom_attr2=某物)
然后有一个非常好的插件来处理这种存储自定义产品属性的功能,称为 WC Fields Factory。
而插件的作者也有一个great article on how to do this w/o need of a plugin. As well as an answer on a similar question here.
我正在尝试在用户 select 自定义属性(责任和营业时间)之后将我的自定义商店页面重定向到购物车页面,然后单击购买按钮。
我已经编写了自定义 JS 代码来检索 variation_id 和属性值并将其附加到 URL 以便它自动添加到购物车并重定向到购物车页面。
href="yourdomain.com/?add-to-cart=47&variation_id=88&quantity=3&attribute_pa_colour=blue&attribute_pa_size=m"
这是我在博客中找到的 URL 格式:(https://businessbloomer.com/woocommerce-custom-add-cart-urls-ultimate-guide/)
我用这种格式制作了 link。
我的link是:
localhost/wordpress/cart/?add-to-cart=1185&variation_id=1641&quantity=1&attribute_pa_liability=2_million&attribute_pa_hours=500_hours
其中 liability 和 hours 是我的自定义属性,其值分别为 100 万、200 万和 500 小时、750 小时。
但是当它被重定向到购物车页面时,woocommerce 给我一个错误并显示它的警告框,其中显示错误消息为 "liability and hours are required fields"。
我认为 woocommerce 无法通过我的 URL 获取属性值。
谁能解释为什么会这样,如果有错误是什么?
已更新
这个 "Business Bloomer" 指南有点过时了……你需要两件事:
1).正确的URL
您不需要将产品和具有所有相关属性的变体 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 文件或任何插件文件。
已测试并有效
You will need to add this data to the order items too
首先取消选中管理面板中的 ajax 添加到购物车选项 然后你需要改变你的属性,然后找出产品 ID、数量、属性 slug 和属性名称(用于在购物车中显示)和变体 ID,然后使你的购物车 url 如下所示。
添加到购物车 link 的属性是:https://www.your-domain.com/?add-to-cart=(product id)&quantity=(numeric quantity)&attribute_pa_(attribute slug)=(attribute name )&variation_id=(版本号)
更多详情请访问http://www.codemystery.com/wordpress-woocommerce-add-cart-link-variations/
关于添加到购物车 url 格式的其他答案是正确的(应该是:/add-to-cart=product_id&my_custom_attr=whatever&my_custom_attr2=某物)
然后有一个非常好的插件来处理这种存储自定义产品属性的功能,称为 WC Fields Factory。 而插件的作者也有一个great article on how to do this w/o need of a plugin. As well as an answer on a similar question here.