Кастомное поле WooCommerce не дает ввести пустое значение или ноль
Я добавил кастомное поле для указание абонентской платы там, где это необходимо. По умолчанию поле пустое. Но стоит в него хоть раз что-то ввести и больше не получается его опустошить или ввести ноль. Каждый раз после обновления в админке в поле появляется предыдущее значение.
Добавлял так:
add_action( 'woocommerce_product_options_general_product_data', 'art_woo_add_custom_fields' );
function art_woo_add_custom_fields() {
global $product, $post;
echo '<div class="options_group">';
woocommerce_wp_text_input( array(
'id' => '_text_field',
'label' => __( 'Абонентская плата в месяц', 'woocommerce' ),
'placeholder' => 'Не заполняйте, если нет',
'desc_tip' => 'true',
'custom_attributes' => array(),
'description' => __( 'Абонентская плата в месяц',
'woocommerce' ),
) );
echo '</div>';
}
/* Сохраняем значение Абонентской платы в базе данных */
add_action( 'woocommerce_process_product_meta', 'art_woo_custom_fields_save', 10 );
function art_woo_custom_fields_save( $post_id ) {
$woocommerce_text_field = $_POST['_text_field'];
if ( $woocommerce_text_field ) {
update_post_meta( $post_id, '_text_field', esc_attr( $woocommerce_text_field ) );
}
}
/* Выводим аренду в карточке товара */
add_action( 'woocommerce_single_product_summary', 'art_get_text_field_before_add_card' );
function art_get_text_field_before_add_card() {
global $post, $product; }
function filter_woocommerce_get_price_html( $price, $_this ) {
global $post, $product;
$text_field = get_post_meta( $post->ID, '_text_field', true );
ob_start();
if ( $text_field ) {
?>
<span class="woocommerce-Price-amount amount" style="text-transform: none;">
<span>Абон. плата (месяц): ₽</span>
<?php echo $text_field; ?>
</span>
<?php
}
$text = ob_get_clean();
return '<span class="woocommerce-Price-amount amount" style="text-transform: none;">Подключение: </span>' . $price . ' <br/> ' . $text;
}
add_filter( 'woocommerce_get_price_html', 'filter_woocommerce_get_price_html', 10, 2 );
Где ошибся?
Ответы (1 шт):
Автор решения: WP Punk
→ Ссылка
В функции function art_woo_custom_fields_save нужно заменить проверку на isset:
function art_woo_custom_fields_save( $post_id ) {
$woocommerce_text_field = $_POST['_text_field'];
if ( isset( $woocommerce_text_field ) ) {
update_post_meta( $post_id, '_text_field', esc_attr( $woocommerce_text_field ) );
}
}