WooCommerce 管理员产品自定义复选框字段不保存值

WooCommerce admin product custom checkbox field not saving value

我在产品选项上创建了自定义复选框,但卡在保存数据中。 我尝试了所有可能的变体,但没有成功。 我哪里错了? 谢谢

这是代码:

add_action( 'woocommerce_product_options_sku', 'custom_checkbox_field' );
function custom_checkbox_field(){
    global $post, $product_object;

    if ( ! is_a( $product_object, 'WC_Product' ) ) {
            $product_object = wc_get_product( $post->ID );
    }
      
            
    woocommerce_wp_checkbox(
    array(
        'id'            => 'custom_checkbox_field',
        'value'         => empty($values) ? 'yes' : $values,
        'label'         => __( 'Label', 'woocommerce' ),
        'description'   => __( 'Description', 'woocommerce' ),
        )
    );
    
}

add_action( 'woocommerce_process_product_meta', 'save_custom_field' );  
    function save_custom_field( $post_id ) {
    

     // grab the product
     $product = wc_get_product( $post_id );

      // save data
      $product->update_meta_data( 'custom_checkbox_field', isset($_POST['custom_checkbox_field']) ? 'yes' : 'no' ); 
      $product->save();
    }

您的代码中缺少一些东西,您最后一个挂钩的函数挂钩可以替换为自 WooCommerce 版本 3 以来更好的函数挂钩。请尝试以下操作:

add_action( 'woocommerce_product_options_sku', 'custom_checkbox_field_product_options_sku' );
function custom_checkbox_field_product_options_sku(){
    global $post, $product_object;

    if ( ! is_a( $product_object, 'WC_Product' ) ) {
        $product_object = wc_get_product( $post->ID );
    }

    $values = $product_object->get_meta('custom_checkbox_field');

    woocommerce_wp_checkbox( array(
        'id'            => 'custom_checkbox_field',
        'value'         => empty($values) ? 'yes' : $values, // Checked by default
        'label'         => __( 'Label', 'woocommerce' ),
        'description'   => __( 'Description', 'woocommerce' ),
    ) );
}

add_action( 'woocommerce_admin_process_product_object', 'save_custom_field_product_options_sku' );
function save_custom_field_product_options_sku( $product ) {
    $product->update_meta_data( 'custom_checkbox_field', isset($_POST['custom_checkbox_field']) ? 'yes' : 'no' );
}

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