WooCommerce: obtenga un campo personalizado de las variaciones del producto y muéstrelo en el “área de información adicional”

2 minutos de lectura

1646753287 799 WooCommerce obtenga un campo personalizado de las variaciones del producto
diminuto

Estoy tratando de agregar un campo personalizado a las variaciones del producto y mostrar el valor del campo personalizado en los productos en el “área de información adicional”.

estoy trabajando desde “WooCommerce: agregue un campo personalizado a cada variación de producto”.

El campo personalizado funciona bien, pero no puedo unir para mostrar el valor en la página del producto.

Esto es lo que tengo hasta ahora:

// 1. Add custom field input @ Product Data > Variations > Single Variation
add_action( 'woocommerce_variation_options_pricing', 'Add_custom_field_to_variations', 10, 3 );
function Add_custom_field_to_variations( $loop, $variation_data, $variation ) {  
    woocommerce_wp_text_input( array(
        'id' => 'custom_field[' . $loop . ']',
        'class' => 'short',
        'label' => __( 'Custom Field', 'woocommerce' ),
        'value' => get_post_meta( $variation->ID, 'custom_field', true ) 
    ));
}

// 2. Save custom field on product variation save
add_action( 'woocommerce_save_product_variation', 'Save_custom_field_variations', 10, 2 );
function Save_custom_field_variations( $variation_id, $i ) {
    $custom_field = $_POST['custom_field'][$i];
    if ( isset( $custom_field ) ) {
        update_post_meta( $variation_id, 'custom_field', esc_attr( $custom_field ) );
    }
}

// 3. Store custom field value into variation data
add_filter( 'woocommerce_available_variation', 'Add_custom_field_variation_data' );
function Add_custom_field_variation_data( $variations ) {  
    $variations['custom_field'] = '<div class="woocommerce_custom_field">Custom Field: <span>' . get_post_meta( $variations[ 'variation_id' ], 'custom_field', true ) . '</span></div>';

    return $variations;
}

// 4. Display custom field on the additional information area
function Display_product_attributes2($product_attributes, $variations){
    $product_attributes['custom_field'] = [
        'label' => __('custom', 'text-domain'),
        'value' => get_post_meta( $variation_id, '_custom_field', true ),
    ];
    return $product_attributes;
}
add_filter('woocommerce_display_product_attributes', 'Display_product_attributes2', 10, 2);

1646753287 452 WooCommerce obtenga un campo personalizado de las variaciones del producto
7uc1f3r

En 'value' => get_post_meta( $variation_id, '_custom_field', true ) haces uso de la $variation_id mientras que esto no está definido.

Así que puedes hacer uso de un bucle foreach y $variations->get_children(); en lugar de agregar una etiqueta personalizada y un valor en el “área de información adicional”

// 4. Display custom field on the additional information area
function display_product_attributes( $product_attributes, $variations ) {
    // Get childIDs in an array
    $children_ids = $variations->get_children();

    foreach ( $children_ids as $child_id ) {
        $value = get_post_meta( $child_id, 'custom_field', true );

        // True
        if ( $value ) {
            // rows
            $product_attributes[ 'custom_field ' . $child_id ] = array(
                'label' => __('custom', 'woocommerce'),
                'value' => $value,
            );
        }
    }

    return $product_attributes;
}
add_filter('woocommerce_display_product_attributes', 'display_product_attributes', 10, 2);

  • ¿Es posible mostrar solo los campos personalizados cuando se selecciona una variación? El código anterior muestra todos los campos personalizados todo el tiempo. Gracias

    – diminuto

    24 de mayo de 2020 a las 8:34

  • @tiny sí, con jQuery. Mira cómo apliqué esto en esta respuesta

    – 7uc1f3r

    3 de junio de 2020 a las 10:02


¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad