代码之家  ›  专栏  ›  技术社区  ›  Bradley

在Woocommerce购物车上显示产品变体的自定义字段

  •  1
  • Bradley  · 技术社区  · 7 年前

    在Woocommerce中,我成功地为后端中的产品变体添加了一个自定义字段。保存其输入数据并在 add-to-cart/variation.php 效果也很好。

    但是在 cart.php ?

    我只为常规产品项目找到了解决方案,但没有为产品变化找到解决方案。以下是我目前的职能范围。php文件:

    //Display Fields in admin on product edit screen
    add_action( 'woocommerce_product_after_variable_attributes', 'woo_variable_fields', 10, 3 );
    
    //Save variation fields values
    add_action( 'woocommerce_save_product_variation', 'save_variation_fields', 10, 2 );
    
    // Create new fields for variations
    function woo_variable_fields( $loop, $variation_data, $variation ) {
    
    echo '<div class="variation-custom-fields">';
    
      // Text Field
      woocommerce_wp_text_input( 
        array( 
          'id'          => '_text_field['. $loop .']', 
          'label'       => __( 'additional fees (e.g. monthly fee)', 'woocommerce' ), 
          'placeholder' => '',
          //'desc_tip'    => true,
          'wrapper_class' => 'form-row form-row-first',
          //'description' => __( 'Enter the custom value here.', 'woocommerce' ),
          'value'       => get_post_meta($variation->ID, '_text_field', true)
        )
      );
    
    echo "</div>"; 
    
    }
    
    /** Save new fields for variations */
    function save_variation_fields( $variation_id, $i) {
    
    // Text Field
    $text_field = stripslashes( $_POST['_text_field'][$i] );
    update_post_meta( $variation_id, '_text_field', esc_attr( $text_field ) );
    }
    
    // Custom Product Variation
    add_filter( 'woocommerce_available_variation', 'custom_load_variation_settings_products_fields' );
    
    function custom_load_variation_settings_products_fields( $variations )    { 
    $variations['variation_custom_field'] = get_post_meta( $variations[ 'variation_id' ], '_text_field', true );  
    return $variations;
    }
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   Bradley    7 年前

    要在购物车项目中显示此自定义字段,请使用以下命令:

    add_filter( 'woocommerce_get_item_data', 'display_custom_field_as_item_data', 20, 2 );
    function display_custom_field_as_item_data( $cart_data, $cart_item ) {
        if( $value = get_post_meta( $cart_item['data']->get_id(), '_text_field', true ) ){
            $cart_data[] = array(
                'name' => __( 'Additional Monthly Fee', 'woocommerce' ),
                'value' => sanitize_text_field( $value )
            );
        }
        return $cart_data;
    }
    

    在购物车和结帐页面中,它在所有产品的帖子类型和产品变体中也会起作用。

    代码进入功能。活动子主题(或主题)的php文件。已测试并正常工作。