在Woocommerce中通过带有自定义元数据的Get请求将商品添加到购物车

拉卡皮奥

我已经在woocommerce的订单视图中(在order-details-item.php内)为每个商品创建了一个按钮,以使客户可以将该商品添加到购物车中,从而购买更多商品。通过使用基于购物车添加的href,我可以使它在简单和可变产品以及具有不同属性的情况下都能正常工作。

问题是我无法传递我创建的自定义元字段(门宽)。我已经尝试了几种解决方案,但到目前为止都无济于事。

在我当前的代码下面:

$url = $order->get_view_order_url() . '/?add-to-cart=' . $item['product_id'];
$simple_ = $product->is_type('simple');

if ( $simple_ != 'simple') {
  $url .= '&variation_id=' . $item['variation_id'];
  $attributes = wc_get_product_variation_attributes($item['variation_id']);
  foreach( $attributes as $key => $value ){ $url .= '&' . $key . '=' . $value; }

  $meta = wc_get_order_item_meta( $item_id ); 
  if ( $meta['Door width'][0] ) { $url .= '&attribute_Door width=' . $meta['Door width'][0]; }
}

<a href="<?php echo $url; ?>"><?php echo __('Order again', 'woocommerce'); ?></a>

我曾在其他帖子中寻找解决方案和建议,但找不到答案。

我想知道是否有人提出建议。

LoicTheAztec

&attribute_Door width=value无法添加到url,因为您不能使用空格。相反,您将使用以后将保存并重命名在购物车中的所有子弹…

同样,您正在使用过时的代码,因为自Woocommerce版本3起,订购商品现在是新的类对象,并且无法直接访问属性。

因此,我对您的代码进行了深入探讨:

$url = $order->get_view_order_url() . '/?add-to-cart=' . $item->get_product_id();

$variation_id = $item->get_variation_id();

if ( $variation_id > 0 ) {
    $url .= '&variation_id=' . $variation_id;
    foreach( wc_get_product_variation_attributes( $variation_id ) as $key => $value ) 
        $url .= '&' . $key . '=' . $value;
    
    $meta = wc_get_order_item_meta( $item_id ); 
    if ( ! empty( $meta['Door width'][0] ) )
        $url .= '&door_width=' . esc_attr( $meta['Door width'][0] );
}

// Display the button
$button_text = __('Order again', 'woocommerce');
echo '<a href="' . $url . '">' . $button_text . '</a>';

因此,对于产品变型,我会得到以下信息(自定义测试)
?add-to-cart=40&variation_id=41&attribute_pa_color=black&attribute_pa_volume-special=15&attribute_pa_quantity=dozen&door_width=100

现在,您需要获取door_width添加到购物车时的信息,以将其保存在购物车对象中,并在购物车和结帐中将其显示为属性:

// Store custom data in cart item
add_action( 'woocommerce_add_cart_item_data','save_custom_data_in_cart', 20, 2 );
function save_custom_data_in_cart( $cart_item_data, $product_id ) {
    if( isset( $_REQUEST['door_width'] ) )
        $cart_item_data['door_width'] = array(
            'label' => __('Door with'),
            'value' => esc_attr( $_REQUEST['door_width'] ),
        );

    if( count($cart_item_data['door_width']) > 0 )
        $cart_item_data['door_width']['key'] = md5( microtime().rand() );

    return $cart_item_data;
}

// Display item custom data in cart and checkout pages
add_filter( 'woocommerce_get_item_data', 'render_custom_data_on_cart_and_checkout', 20, 2 );
function render_custom_data_on_cart_and_checkout( $cart_data, $cart_item ){
    $custom_items = array();

    if( !empty( $cart_data ) )
        $custom_items = $cart_data;

    if( isset( $cart_item['door_width'] ) )
        $custom_items[] = array(
            'name'  => $cart_item['door_width']['label'],
            'value' => $cart_item['door_width']['value'],
        );

    return $custom_items;
}

代码进入您的活动子主题(或活动主题)的function.php文件中。

经过测试和工作。它也应该为您工作。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

将多个自定义数据数组添加到WooCommerce自定义Ajax上的购物车项目中添加到购物车

在WooCommerce订单中添加到购物车自定义字段数据

使用 Woocommerce 3 中的 GET 方法将来自 url 的自定义数据添加到购物车

将自定义购物车商品值添加到WooCommerce订单商品元数据

自定义添加到购物车按钮以将多个产品添加到购物车中,数量为:woocommerce

Woocommerce 产品添加到购物车自定义数据 img

通过WooCommerce产品设置中的自定义复选框禁用添加到购物车按钮

将具有自定义定价的产品添加到购物车时出错-WooCommerce

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

在“添加到购物车”下的自定义文本,但不在Woocommerce中

在Woocommerce 3中自定义添加到购物车消息

在 WooCommerce 中添加到购物车后更改自定义 Ajax 添加到购物车按钮文本

设置自定义添加到购物车默认数量(Woocommerce 购物车页面除外)

禁用 WooCommerce 产品添加到购物车以获得特定的自定义分类术语元值

WooCommerce添加到购物车,从自定义选择字段中添加第二个产品

将产品添加到Woocommerce单个产品页面上的购物车后,激活自定义按钮

WooCommerce自定义产品类型-多个添加到购物车部分的问题

Woocommerce:添加到购物车后的自定义jquery事件

WooCommerce自定义PHP代码更改添加到购物车按钮文本

使用Wordpress woocommerce创建自定义“添加到购物车”

将自定义产品计算价格添加到Woocommerce购物车

在Woocommerce商店页面上自定义添加到购物车按钮

单个Woocommerce产品自定义变体添加到购物车按钮

根据WooCommerce产品自定义库存状态禁用添加到购物车按钮

如何在WooCommerce中重定向到自定义添加到购物车按钮上的结帐

根据 Woocommerce 中的自定义字段替换特定产品的 ajax 添加到购物车

WP自定义帖子类型无法在woocommerce 3.0以上版本中添加到购物车

在Woocommerce中的产品自定义循环上启用Ajax添加到购物车按钮

在WooCommerce中为特定产品类别自定义“添加到购物车”按钮