php - manager - personalizar checkout woocommerce
El campo personalizado de las páginas de productos de administrador se muestra en el carrito y en el proceso de pago (1)
He probado su código y he corregido algunas partes para que ese campo personalizado del producto aparezca en las páginas de carrito y de pago.
Aquí está ese código corregido:
// Insert a Custom Admin Field
add_action( ''woocommerce_product_options_general_product_data'', ''woo_add_custom_general_fields'' );
function woo_add_custom_general_fields() {
echo ''<div class="options_group">'';
woocommerce_wp_text_input( array(
''id'' => ''days_manufacture'',
''label'' => __( ''Days for Manufacture'', ''woocommerce'' ),
''placeholder'' => '''',
''description'' => __( ''Insert here'', ''woocommerce'' ),
''type'' => ''number'',
''custom_attributes'' => array(
''step'' => ''any'',
''min'' => ''1''
),
) );
echo ''</div>'';
}
// Save the field
add_action( ''woocommerce_process_product_meta'', ''woo_add_custom_general_fields_save'' );
function woo_add_custom_general_fields_save( $post_id ){
$woocommerce_number_field = $_POST[''days_manufacture''];
if( !empty( $woocommerce_number_field ) )
update_post_meta( $post_id, ''days_manufacture'', esc_attr( $woocommerce_number_field ) );
}
// Store custom field
add_action( ''woocommerce_add_cart_item_data'', ''save_days_field'', 10, 2 );
function save_days_field( $cart_item_data, $product_id ) {
$special_item = get_post_meta( $product_id , ''days_manufacture'',true );
if(!empty($special_item)) {
$cart_item_data[ ''days_manufacture'' ] = $special_item;
// below statement make sure every add to cart action as unique line item
$cart_item_data[''unique_key''] = md5( microtime().rand() );
WC()->session->set( ''days_manufacture'', $special_item );
}
return $cart_item_data;
}
// Render meta on cart and checkout
add_filter( ''woocommerce_get_item_data'', ''rendering_meta_field_on_cart_and_checkout'', 10, 2 );
function rendering_meta_field_on_cart_and_checkout( $cart_data, $cart_item ) {
$custom_items = array();
// Woo 2.4.2 updates
if( !empty( $cart_data ) ) {
$custom_items = $cart_data;
}
if( isset( $cart_item[''days_manufacture''] ) ) {
$custom_items[] = array( "name" => __( "Days", "woocommerce" ), "value" => $cart_item[''days_manufacture''] );
}
return $custom_items;
}
Naturalmente, esto va en el archivo function.php de su tema hijo activo (o tema) o también en cualquier archivo de complemento.
Este código está probado y funciona.
Referencia: WooCommerce: Agregue Metabox personalizado a la página de pedido de administrador
He creado un campo personalizado en WooCommerce Admin en la pestaña de configuración general de las páginas del producto, para insertar algunos días para la fabricación. Me gustaría mostrar este valor de campo personalizado en las páginas de carrito y pago sobre el nombre de cada producto.
Aquí está mi código:
// Insert a Custom Admin Field
function woo_add_custom_general_fields() {
echo ''<div class="options_group">'';
woocommerce_wp_text_input( array(
''id'' => ''days_manufacture'',
''label'' => __( ''Days for Manufacture'', ''woocommerce'' ),
''placeholder'' => '''',
''description'' => __( ''Insert here'', ''woocommerce'' ),
''type'' => ''number'',
''custom_attributes'' =>
array(
''step'' => ''any'',
''min'' => ''1''
)
) );
echo ''</div>'';
}
add_action( ''woocommerce_product_options_general_product_data'', ''woo_add_custom_general_fields'' );
// Save field
function woo_add_custom_general_fields_save( $post_id ){
$woocommerce_number_field = $_POST[''days_manufacture''];
if( !empty( $woocommerce_number_field ) )
update_post_meta( $post_id, ''days_manufacture'', esc_attr( $woocommerce_number_field ) );
}
add_action( ''woocommerce_process_product_meta'', ''woo_add_custom_general_fields_save'' );
function save_days_field( $cart_item_data, $product_id ) {
if( isset( $_REQUEST[''days_manufacture''] ) ) {
$cart_item_data[ ''days_manufacture'' ] = get_post_meta( $post->ID, ''days_manufacture'',true );
/* below statement make sure every add to cart action as unique line item */
$cart_item_data[''unique_key''] = md5( microtime().rand() );
}
return $cart_item_data;
}
add_action( ''woocommerce_add_cart_item_data'', ''save_days_field'', 10, 2 );
function render_meta_on_cart_and_checkout( $cart_data, $cart_item = null ) {
$custom_items = array();
/* Woo 2.4.2 updates */
if( !empty( $cart_data ) ) {
$custom_items = $cart_data;
}
if( isset( $cart_item[''days_manufacture''] ) ) {
$custom_items[] = array( "name" => ''Days:'', "value" => $cart_item[''days_manufacture''] );
}
return $custom_items;
}
add_filter( ''woocommerce_get_item_data'', ''render_meta_on_cart_and_checkout'', 10, 2 );
Pero esto no funciona, ya que no puedo mostrar el valor del campo personalizado en las páginas de compras y compras.
¿Cómo puedo conseguir esto?
Gracias