php - tutorial - Los campos personalizados de WooCommerce no se actualizarán cuando los deje vacíos y aún muestren campos vacíos
plugin para personalizar campos del checkout de woocommerce (3)
Agregué un campo personalizado a una sola página de producto para woocommerce con el fin de mostrar el número de ISBN de los libros que vendo. Encontré una buena guía y logré agregar todo lo que quisiera. Sin embargo, cuando vacíe el campo personalizado para ISBN, no se vaciará en el sitio.
Tengo el siguiente código en functions.php
// Display Fields
add_action( ''woocommerce_product_options_general_product_data'', ''woo_add_custom_general_fields'' );
// Save Fields
add_action( ''woocommerce_process_product_meta'', ''woo_add_custom_general_fields_save'' );
function woo_add_custom_general_fields() {
global $woocommerce, $post;
echo ''<div class="options_group">'';
// Custom fields will be created here...
// Text Field
woocommerce_wp_text_input(
array(
''id'' => ''_ISBN_field'',
''label'' => __( ''ISBN'', ''woocommerce'' ),
''placeholder'' => '''',
''desc_tip'' => ''true'',
''description'' => __( ''ISBN.'', ''woocommerce'' )
)
);
function woo_add_custom_general_fields_save( $post_id ){
// Customer text ISBN Field
$woocommerce_text_field = $_POST[''_ISBN_field''];
if( !empty( $woocommerce_text_field ) )
update_post_meta( $post_id, ''_ISBN_field'', esc_attr( $woocommerce_text_field ) );
}
Luego en el short-description.php lo hice para que aparezca en la página del producto. Sin embargo, todavía muestra el nombre ISBN10: si es un campo vacío.
<?php
// Display Custom Field Value
if (!((get_post_meta($post->ID, ''_ISBN_field'', true))==”)) {
//Not empty
echo ''<b>ISBN10: </b>'',get_post_meta( $post->ID, ''_ISBN_field'' , true);
}
?>
Entonces, los dos problemas son que no puedo editar el producto para que contenga un campo personalizado vacío. Y si el campo está vacío (solo es posible cuando el campo no contenía datos), sigue mostrando el nombre del campo.
Gracias por adelantado.
Que hace:
var_dump( get_post_meta( $post->ID, ''_ISBN_field'' , true) );
¿regreso?
Supongo que el problema es que el campo todavía contiene algún valor, incluso si está vacío. Compruebe que var_dump y luego ajuste su sentencia if
y supongo que la declaración debería ser como:
if ( get_post_meta( $post->ID, ''_ISBN_field'', true ) != '''' ) {
Tu función de guardar debería ser como
function woo_add_custom_general_fields_save( $post_id ){
// Customer text ISBN Field
$woocommerce_text_field = $_POST[''_ISBN_field''];
if( !empty( $woocommerce_text_field ) )
update_post_meta( $post_id, ''_ISBN_field'', esc_attr( $woocommerce_text_field ) );
else
update_post_meta( $post_id, ''_ISBN_field'', '''' );
}
If !empty( $woocommerce_text_field )
devuelve true solo si $_POST[''_ISBN_field'']
tiene algún valor por lo que la meta de la publicación no se actualiza si $_POST[''_ISBN_field'']
está vacío
Prueba esto:
<?php
// Display Custom Field Value
$ISBN_field = get_post_meta($post->ID, ''_ISBN_field'', true);
if( !empty( $ISBN_field ) ){
echo ''<b>ISBN10: </b>''.$ISBN_field;
} ?>
Saludos