Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在Woocommerce中通过带有自定义元数据的Get请求将项目添加到购物车_Php_Wordpress_Woocommerce_Get_Cart - Fatal编程技术网

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

Php 在Woocommerce中通过带有自定义元数据的Get请求将项目添加到购物车,php,wordpress,woocommerce,get,cart,Php,Wordpress,Woocommerce,Get,Cart,我在woocommerce的order视图中为每个项目创建了一个按钮(位于order details item.php中),以使客户能够将该项目添加到购物车中,从而购买更多。通过使用一个基于?add to cart的href,我可以让它很好地工作,既可以用于简单的产品,也可以用于可变的产品,并且具有不同的属性 问题是我无法同时传递我创建的自定义元字段(门宽度)。我试过几种解决办法,但到目前为止都没有用 下面是我当前的代码: $url = $order->get_view_order_url

我在woocommerce的order视图中为每个项目创建了一个按钮(位于order details item.php中),以使客户能够将该项目添加到购物车中,从而购买更多。通过使用一个基于?add to cart的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>
$url=$order->get_view_order_url()。/?添加到购物车='$项目[‘产品标识’];
$simple\=$product->is\'type('simple');
如果($simple!=“simple”){
$url.='&variation_id='.$item['variation_id'];
$attributes=wc_get_product_variation_attributes($item['variation_id');
foreach($key=>$value的属性){$url.='&'$key.='.$value;}
$meta=wc\u get\u order\u item\u meta($item\u id);
如果($meta['Door width'][0]){$url.='&attribute_Door width='.$meta['Door width'][0];}
}
我在其他帖子上寻找了解决方案和建议,但没有找到答案


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

在url中添加
&attribute\u Door width=value
无效,因为您不能使用空格。相反,您将使用任何slug,这些slug将在以后的购物车中保存并重命名

此外,由于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>';
代码进入活动子主题(或活动主题)的function.php文件


测试和工作。它也应该对您有用。

再次感谢您的帮助!只需将保存信息添加到meta,这样它就可以传递到感谢页面、电子邮件和数据库。
// 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;
}