允许在 WooCommerce 中删除自定义字段值

Allow a custom field value to be removable in WooCommerce

我为 woo-commerce 产品添加了自定义字幕字段。当我从仪表板填写它的字段时,它会出现在产品中。我可以更新文本,但无法删除它的值,它会在我更新产品时再次出现。
这是代码。我从某处复制

 <?php

 // Display Fields
  add_action('woocommerce_product_options_general_product_data', 
 'woocommerce_product_custom_fields');

 // Save Fields
  add_action('woocommerce_process_product_meta', 'woocommerce_product_custom_fields_save');

 function woocommerce_product_custom_fields()
 {
    global $woocommerce, $post;
    echo '<div class="product_custom_field">';
    // Custom Product Text Field
    woocommerce_wp_text_input(
    array(
        'id' => '_custom_product_subtitle',
        'placeholder' => 'Custom Product Subtitle',
        'label' => __('Custom Product Subtitle', 'woocommerce'),
        'desc_tip' => 'true'
      )
   );

 }

 function woocommerce_product_custom_fields_save($post_id)
 {
 // Custom Product Text Field

 $woocommerce_custom_product_text_field = $_POST['_custom_product_subtitle'];
 if (!empty($woocommerce_custom_product_text_field))
 update_post_meta($post_id, '_custom_product_subtitle', 
 esc_attr($woocommerce_custom_product_text_field));
 }

// To show after the title

add_action( 'woocommerce_after_shop_loop_item_title', 'custom_field_display_below_title', 2 );
function custom_field_display_below_title(){
global $product;

// Get the custom field value
$custom_field = get_post_meta( $product->get_id(), '_custom_product_subtitle', true );

// Display
if( ! empty($custom_field) ){
    echo '<p class="custom-product-subtitle">'.$custom_field.'</p>';
}
}

This is the result of the code, it also displays where I want to, but I can't make remove the text it appears again when I update

要能够重置(清空)此自定义字段,只需替换代码行(来自您的第二个函数):

if( ! empty($woocommerce_custom_product_text_field) ){

作者:

if( isset($woocommerce_custom_product_text_field) ){

所以现在您可以删除字段值并保存它。


现在从 WooCommerce 3 开始,您的代码有点过时了……另外,您应该使用更短的键和变量名。

以下是您重新访问的代码 (将字段元键从 '_custom_product_subtitle' 更改为简单的 '_subtitle',替换了一个挂钩并进行了一些其他更改)

// Display a text Field (admin single product)
add_action( 'woocommerce_product_options_general_product_data', 'display_admin_product_custom_text_field' );
function woocommerce_product_custom_fields() {
    echo '<div class="product_custom_field">';

    woocommerce_wp_text_input( array(
        'id' => '_subtitle',
        'label'       => __('Custom subtitle', 'woocommerce'),
        'placeholder' => __('You can add optionally a custom subtitle', 'woocommerce'),
        'desc_tip' => 'true'
    ) );
    
    echo  '</div>'; // <== missing
}

 // Save Text Field value (admin)
add_action( 'woocommerce_admin_process_product_object', 'save_admin_product_custom_text_field_value' );
function save_admin_product_custom_text_field_value( $product ) {
    if ( isset($_POST['_subtitle']) ) {
        $product->update_meta_data( '_subtitle', sanitize_text_field($_POST['_subtitle']) );
    }
}

// Display product subtitle (front end)
add_action( 'woocommerce_after_shop_loop_item_title', 'custom_field_display_below_title', 2 );
function custom_field_display_below_title(){
    global $product;
    
    $value = $product->get_meta('_subtitle'); // Get the custom field value
    
    if( ! empty($value) ){
        echo '<p class="product-subtitle">' . $value . '</p>'; // Display
    }
}

代码进入活动子主题(或活动主题)的 functions.php 文件。已测试并有效。