Campo personalizado en productos variables

  • WooCommerce - Blog

Campo personalizado en productos variables

Hace poco más de un año os explicamos en ¿Cómo añadir iconos personalizados en los productos? una manera simple y sencilla de añadir una serie de iconos personalizados en las páginas de productos de una tienda virtual. En esa misma entrada aprendimos a añadir esos campos personalizados en la pestaña Generales de la página de edición de los productos simples.

Hoy vamos a aprender a hacer visible un campo personalizado de uso interno en un ERP enlazado con la tienda virtual y que no va a tener ningún tipo de uso en la página de producto, aunque también lo podría haber tenido, tal y como aprendimos en la entrada indicada, añadiendo algunas funciones adicionales, pero dado que el cliente sólo necesitaba que fuera visible en la página de edición del producto, no tuvimos la necesidad de añadirlo en la página de producto. En este caso concreto sí que nos encontramos con que la mayoría de los productos son variables, por lo que necesitaba que el campo fuese visible y estuviese disponible también para todas y cada una de las variaciones de los productos variables.

Pues dicho y hecho, nos pusimos manos a la obra.

¿Cómo lo hicimos?

Lo que hicimos fue añadir cuatro funciones PHP en el archivo functions.php del tema hijo de la tienda virtual del cliente. Dos para gestionar el campo en los productos simples, básicamente copiado del código publicado en la entrada indicada en el inicio de esta misma entrada, y dos para gestionar el campo en las distintas variantes de producto. También hay que tener en cuenta que de las cuatro funciones PHP creadas, dos son para mostrar el campo, una en los productos simples y otra en los productos variables, y otras dos son para actualizar el valor que se muestra en el mismo, igualmente una para cada tipo de producto.

Veamos las funciones PHP que añadimos:

/*
Campo personalizado
*/
// Añadimos el campo UPC
function campo_personalizado_apg() {
	woocommerce_wp_text_input( array( 
		'id' => 'upc', 
		'class' => 'wc_input short', 
		'label' => __( 'UPC', 'woocommerce' )
	) );
}
add_action( 'woocommerce_product_options_pricing', 'campo_personalizado_apg' );

// Añadimos el campo UPC (variables)
function campo_personalizado_variable_apg( $loop, $datos_de_variacion, $variacion ) {
	echo PHP_EOL . "<div>";
	woocommerce_wp_text_input( array( 
		'id' => 'upc[' . $variacion->ID . ']', 
		'class' => 'wc_input short', 
		'label' => __( 'UPC', 'woocommerce' ),
		'value'	=> get_post_meta( $variacion->ID, 'upc', true ),
		'style' => 'display:block;', 
	) );
	echo "</div>" . PHP_EOL;
}
add_action( 'woocommerce_product_after_variable_attributes', 'campo_personalizado_variable_apg', 10, 3 );

//Actualiza los valores introducidos en cada campo
function guarda_campos_personalizados_apg( $product_id ) { 
    if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
        return;
    }
	if ( isset( $_POST['upc'] ) ) {
		update_post_meta( $product_id, 'upc', $_POST['upc'] );
	} else {
		delete_post_meta( $product_id, 'upc' );
	}
}
add_action( 'save_post', 'guarda_campos_personalizados_apg' );

//Actualiza los valores introducidos en cada campo
function guarda_campos_personalizados_variable_apg( $product_id ) { 
    if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
        return;
    }
	if ( isset( $_POST['upc'][$product_id] ) ) {
		update_post_meta( $product_id, 'upc', $_POST['upc'][$product_id] );
	} else {
		delete_post_meta( $product_id, 'upc' );
	}
}
add_action( 'woocommerce_save_product_variation', 'guarda_campos_personalizados_variable_apg', 10, 2 );

En este caso concreto el campo personalizado se llama UPC y en la base de datos está almacenado en un metadato llamado upc. El campo UPC es utilizado exclusivamente por un ERP que gestiona remotamente la tienda virtual y aunque en principio no tiene ningún tipo de utilidad en la propia tienda online, el cliente quería que fuera visible en la página de edición del producto y gracias a estas cuatro funciones PHP ha sido posible.

Un problema al que nos hemos tenido que enfrentar, y al que todavía no le hemos dado una solución satisfactoria, al menos como nos gusta en APG arreglar los problemas, es que al tener activas las dos últimas funciones PHP al realizar importaciones masivas de productos con el plugin de WordPress WP All Import, los campos UPC quedan vacíos. De momento lo hemos resuelto eliminando esas dos funciones PHP dado que el cliente sólo necesita tener los campos visibles y no necesita editarlos de ninguna forma. El día que encontremos una solución más satisfactoria actualizaremos esta entrada para que todos tengáis acceso a la solución encontrada.

Esperamos que este código os resulte útil y funcional para vuestras propias tiendas virtuales o para futuros proyectos.

2017-03-27T18:08:38+02:00 Jueves, 9 de Junio de 2016|Categorías: Art Project Group|Etiquetas: , , , , |Sin comentarios

Deje un comentario

Comparte esto con un amigo