我要去检查添加到购物车并购买的产品是否在订单中。即,当用户与其他可变产品一起购买可变产品时,我想检查是否添加和购买了特定的可变产品。这样我就可以在Thankyou页面和发送给管理员和客户的电子邮件中动态显示一些信息。
我已经尝试使用“ Checking that a specific attribute value is used in a cart Item (product variation)”应答代码,但是购买产品后,此功能在Thankyou页面上不起作用。
[我正在尝试的是,如果订单中的产品具有属性值“ Custom”,则显示动态内容;如果订单中的产品具有属性值,则在订单表中显示附加表行“订单”,带有以下代码:
function add_custom_row_to_order_table( $total_rows, $myorder_obj ) {
if ( is_attr_in_cart('custom') ) {
$cmeasuement = __( 'Yes', 'domain' );
}else{
$cmeasuement = __( 'No', 'domain' );
}
$total_rows['el_custom'] = array(
'label' => __('Custom Required?', 'domain'),
'value' => $cmeasuement,
);
return $total_rows;
}
add_filter( 'woocommerce_get_order_item_totals', 'add_custom_row_to_order_table', 10, 2 );
但是我一直得到“否” (请参见下面的屏幕快照),原因是因为is_attr_in_cart('custom')
函数未检测到属性是否在顺序中。在正确的方向提供帮助,以检测订单是否包含具有特定属性值的产品。
感谢您的任何帮助。
要使其与WooCommerce orders]一起使用,您需要另一个自定义条件函数(($attribute_value
是要定位的产品属性的slug值):
)的代码中起作用,如果找到产品属性,则在总表中添加附加行,并带有“是”;否则,将其添加到“否”:function is_attr_in_order( $order, $attribute_value ){ $found = false; // Initializing // Loop though order items foreach ( $order->get_items() as $item ){ // Only for product variations if( $item->get_variation_id() > 0 ){ $product = $item->get_product(); // The WC_Product Object $product_id = $item->get_product_id(); // Product ID // Loop through product attributes set in the variation foreach( $product->get_attributes() as $taxonomy => $term_slug ){ // comparing attribute parameter value with current attribute value if ( $attribute_value === $term_slug ) { $found = true; break; } } } if($found) break; } return $found; }
现在,此条件函数将在您收到订单的页面((thankyou)
。经过测试,可以正常工作。add_filter( 'woocommerce_get_order_item_totals', 'add_custom_row_to_order_table', 10, 3 ); function add_custom_row_to_order_table( $total_rows, $order, $tax_display ) { $domain = 'woocommerce'; // The text domain (for translations) $term_slug = 'custom'; // <== The targeted product attribute slug value $total_rows['custom'] = array( 'label' => __( "Custom Required?", $domain ), 'value' => is_attr_in_order( $order, $term_slug ) ? __( "Yes", $domain ) : __( "No", $domain ), ); return $total_rows; }
代码进入您的活动子主题(或活动主题)的functions.php文件中