woocommerce - 在 Woocommerce 中使用 ACF 保存多个字段(购物车、结帐、订单详细信息)
问题描述
我正在设置 ACF 以在单个产品页面中选择选项。我已经在单个产品页面中添加了自定义字段。如何保存多个字段?此代码有效,但我需要保存多个字段,例如添加的字段选项颜色。
/** Output custom fields field. */
function product_options_output_field() {
$html = "";
if( have_rows('select_options') ):
$html .= "<div class='select-options'>";
$html .= "<h4>Select Options</h4>";
$html .= "<select class='option-multi-trip-one-way' id='option-multi-trip-one-way' name='option-multi-trip-one-way'>";
$html .= "<option value='N/A'>Multi-trip/One-way **</option>";
while( have_rows('select_options') ) : the_row();
$multi_trip = get_sub_field('multi-tripone-way');
$html .= "<option value=".$multi_trip.">".$multi_trip."</option>";
endwhile;
$html .= "</select>";
$html .= "<br/>";
$html .= "<select class='option-color' id='option-color' name='option-color'>";
$html .= "<option value='N/A'>Color</option>";
while( have_rows('select_options') ) : the_row();
$color = get_sub_field('color');
$html .= "<option value=".$color.">".$color."</option>";
endwhile;
$html .= "</select>";
$html .= "</div>";
endif;
echo $html;
}
add_action( 'woocommerce_before_add_to_cart_button', 'product_options_output_field', 10 );
/** Add custom fields to cart item. */
function product_options_add_to_cart_item( $cart_item_data, $product_id, $variation_id ) {
$option_multi_trip_one_way = filter_input( INPUT_POST, 'option-multi-trip-one-way');
if ( empty( $option_multi_trip_one_way ) ) {
return $cart_item_data;
}
$cart_item_data['option-multi-trip-one-way'] = $option_multi_trip_one_way;
return $cart_item_data;
}
add_filter( 'woocommerce_add_cart_item_data', 'product_options_add_to_cart_item', 10, 3 );
/**Display custom fields in the cart. */
function product_options_display_cart( $item_data, $cart_item ) {
if ( empty( $cart_item['option-multi-trip-one-way'] ) ) {
return $item_data;
}
$item_data[] = array(
'key' => __( 'Multi-trip/One-way **' ),
'value' => wc_clean( $cart_item['option-multi-trip-one-way'] ),
'display' => '',
);
return $item_data;
}
add_filter( 'woocommerce_get_item_data', 'product_options_display_cart', 10, 2 );
/** Add custom fields to order. */
function product_options_to_order_items( $item, $cart_item_key, $values, $order ) { if ( empty( $values['option-multi-trip-one-way'] ) ) {
return; } $item->add_meta_data( __( 'Multi-trip/One-way **' ), $values['option-multi-trip-one-way'] );}add_action( woocommerce_checkout_create_order_line_item', 'product_options_to_order_items', 10, 4 );
http://prntscr.com/n42nig http://prntscr.com/n42nz0 http://prntscr.com/n42oj5
解决方案
/**Output ACF in single product. */
function product_options_output_field() {
$html = "";
if( have_rows('select_options') ):
$html .= "<div class='select-options'>";
$html .= "<h4>Select Options</h4>";
$html .= "<select class='option-multi-trip-one-way' id='option-multi-trip-one-way' name='option-multi-trip-one-way'>";
$html .= "<option value='N/A'>Multi-trip/One-way **</option>";
while( have_rows('select_options') ) : the_row();
$multi_trip = get_sub_field('multi-tripone-way');
$html .= "<option value=".$multi_trip.">".$multi_trip."</option>";
endwhile;
$html .= "</select>";
$html .= "<br/>";
$html .= "<select class='option-color' id='option-color' name='option-color'>";
$html .= "<option value='N/A'>Color</option>";
while( have_rows('select_options') ) : the_row();
$color = get_sub_field('color');
$html .= "<option value=".$color.">".$color."</option>";
endwhile;
$html .= "</select>";
$html .= "</div>";
endif;
echo $html;
}
add_action( 'woocommerce_before_add_to_cart_button', 'product_options_output_field', 10 );
/** * Add ACF to cart item. */
function product_options_add_to_cart_item( $cart_item_data, $product_id, $variation_id ) {
$option_multi_trip_one_way = filter_input( INPUT_POST, 'option-multi-trip-one-way');
$option_color = filter_input( INPUT_POST, 'option-color');
if ( empty( $option_multi_trip_one_way) || empty( $option_color)) {
return $cart_item_data;
}
$cart_item_data['option-multi-trip-one-way'] = $option_multi_trip_one_way;
$cart_item_data['option-color'] = $option_color;
return $cart_item_data;
}
add_filter( 'woocommerce_add_cart_item_data', 'product_options_add_to_cart_item', 10, 3 );
/** Display ACF in the cart.*/
function product_options_display_cart( $item_data, $cart_item ) {
if ( empty( $cart_item['option-multi-trip-one-way'] ) || empty( $cart_item['option-color'] )) {
return $item_data;
}
$item_data[] = array(
'key' => __( 'Multi-trip/One-way **' ),
'value' => wc_clean( $cart_item['option-multi-trip-one-way'] ),
'display' => '',
);
$item_data[] = array(
'key' => __( 'Color' ),
'value' => wc_clean( $cart_item['option-color'] ),
'display' => '',
);
return $item_data;
}
add_filter( 'woocommerce_get_item_data', 'product_options_display_cart', 10, 2 );
/** Add ACF to order.*/
function product_options_to_order_items( $item, $cart_item_key, $values, $order ) {
if ( empty( $values['option-multi-trip-one-way'] ) || empty( $values['option-color'] )) {
return;
}
$item->add_meta_data( __( 'Multi-trip/One-way **' ), $values['option-multi-trip-one-way'] );
$item->add_meta_data( __( 'Color' ), $values['option-color'] );
}
add_action( 'woocommerce_checkout_create_order_line_item', 'product_options_to_order_items', 10, 4 );
推荐阅读
- python - “list[x]”如何从“list”中只得到一个数字?
- php - 在 Laravel 中刷新模型时如何选择字段
- discord.js - 如何通过不和谐的审计日志找到被禁止的原因?(使用 Discord.js)
- typescript - [Nuxt.js/Typescript]如何从vuex获取数据?
- python - Python 脚本不起作用,但 Spyder 和 CMD
- javascript - 在 iframe 中监听事件
- r - 如何从 R 中的 x 和 y 点计算多边形的面积?
- javascript - 如何检查元素是否在视口中一次
- python - SQLITE - 要查看刚刚对应用程序进行的更新,需要注销并重新登录
- perl - Perl 包/模块的返回值处理