【问题标题】:Custom WooCommerce product fields not saving in database自定义 WooCommerce 产品字段未保存在数据库中
【发布时间】:2020-04-14 10:49:16
【问题描述】:

我为 WooCommerce 产品创建了一个自定义字段,但是当我尝试保存它时,它的值没有保存在数据库中

function product_certification_number() {
    $args = array(
        'id'            => 'product_certification_number',
        'label'         => sanitize_text_field( 'Product Certification Number' ),
    );
    woocommerce_wp_text_input( $args );
}
add_action('woocommerce_product_options_general_product_data','product_certification_number' );

function product_certification_number_save( $post_id ) {

    if ( ! ( isset( $_POST['woocommerce_meta_nonce'], $_POST[ 'product_certification_number' ] ) || wp_verify_nonce( sanitize_key( $_POST['woocommerce_meta_nonce'] ), 'woocommerce_save_data' ) ) ) {
        return false;
    }

    $product_teaser = sanitize_text_field(
        wp_unslash( $_POST[ 'product_certification_number' ] )
    );

    update_post_meta(
        $post_id,
        'product_certification_number',
        esc_attr( $product_teaser )
    );
}
add_action('woocommerce_process_product_meta','product_certification_number_save');

【问题讨论】:

  • product_certification_number_save 回调在哪里?
  • @7uc1f3r 编辑了我的问题,请检查

标签: php wordpress woocommerce hook-woocommerce


【解决方案1】:

我在这个问题上浪费了两个小时。

我终于发现你需要在update_meta_data之后调用save_meta_data

/** @var WC_Product */
$product->update_meta_data($key, $value);
$product->save_meta_data();

【讨论】:

    【解决方案2】:

    编辑:使用woocommerce_admin_process_product_object 保存而不是过时的woocommerce_process_product_meta。谢谢:@LoicTheAztec


    // Add field
    function product_certification_number() {
        $args = array(
            'id'            => '_product_certification_number',
            'label'         => __( 'Product Certification Number', 'woocommerce' ),
            'class'         => 'custom-field',
            'desc_tip'      => true,
            'description'   => __( 'My description', 'woocommerce' ),   
        );
        woocommerce_wp_text_input( $args );
    }
    add_action('woocommerce_product_options_general_product_data','product_certification_number', 10, 0 );
    
    // Save
    function product_certification_number_save( $product ){
        if( isset($_POST['_product_certification_number']) ) {
            $product->update_meta_data( '_product_certification_number', sanitize_text_field( $_POST['_product_certification_number'] ) );
        }
    }
    add_action( 'woocommerce_admin_process_product_object', 'product_certification_number_save', 10, 1 );
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-07
    • 1970-01-01
    • 1970-01-01
    • 2021-04-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多