如何在WooCommerce的“产品变体”界面中设置自定义字段

时间:2018-03-08 04:49:09

标签: php wordpress woocommerce

WordPress插件WooCommerce支持Custom Fields

可以在“屏幕选项”下切换自定义字段:

enter image description here

enter image description here

但是,这些自定义字段不会被product variations隔离。只有一组自定义字段适用于WooCommerce界面中的所有产品变体,这是不合适的,因为不同的产品变体可能具有不同的产品MPN,例如,这是我为自己设置的自定义字段之一。

我找到的closest off-site solution没有链接到自定义字段。下面显示的代码显示了如何在“产品变体”界面中设置输入字段。如何修改以下解决方案以将“产品变体”界面链接到自定义字段?

这个问题不同于与高级自定义字段有关的问题,因为我没有使用该插件。此外,至少one other similar question on Stack Overflow,但我不熟悉PHP,我不理解它,也不知道它是否相关 - 但我会指出OP和我没有接受解决方案不想在那里筑巢。

/** 
 * Create new fields for variations
 *
 */
function variation_settings_fields( $loop, $variation_data, $variation ) {

    // Text Field
    woocommerce_wp_text_input( 
        array( 
            'id'          => '_ean_code[' . $variation->ID . ']', 
            'label'       => __( 'EAN-CODE', 'woocommerce' ), 
            'placeholder' => 'EAN-CODE',
            'desc_tip'    => 'true',
            'description' => __( 'Enter your custom EAN code.', 'woocommerce' ),
            'value'       => get_post_meta( $variation->ID, '_ean_code', true )
        )
    );
    woocommerce_wp_text_input( 
        array( 
            'id'          => '_stock_amsterdam[' . $variation->ID . ']', 
            'label'       => __( 'Nr. of Stock in Amsterdam', 'woocommerce' ), 
            'desc_tip'    => 'true',
            'description' => __( 'Enter nr. of Stock in Amsterdam', 'woocommerce' ),
            'value'       => get_post_meta( $variation->ID, '_stock_amsterdam', true ),
            'custom_attributes' => array(
                            'step'  => 'any',
                            'min'   => '0'
                        ) 
        )
    );
    woocommerce_wp_text_input( 
        array( 
            'id'          => '_stock_den_bosch[' . $variation->ID . ']', 
            'label'       => __( 'Nr. of Stock in Den Bosch', 'woocommerce' ), 
            'desc_tip'    => 'true',
            'description' => __( 'Enter nr. of Stock in Den Bosch', 'woocommerce' ),
            'value'       => get_post_meta( $variation->ID, '_stock_den_bosch', true ),
            'custom_attributes' => array(
                            'step'  => 'any',
                            'min'   => '0'
                        ) 
        )
    );
    woocommerce_wp_text_input( 
        array( 
            'id'          => '_stock_alkmaar[' . $variation->ID . ']', 
            'label'       => __( 'Nr. of Stock in Alkmaar', 'woocommerce' ), 
            'desc_tip'    => 'true',
            'description' => __( 'Enter nr. of Stock in Alkmaar', 'woocommerce' ),
            'value'       => get_post_meta( $variation->ID, '_stock_alkmaar', true ),
            'custom_attributes' => array(
                            'step'  => 'any',
                            'min'   => '0'
                        ) 
        )
    );
}

/**
 * Save new fields for variations
 *
 */
function save_variation_settings_fields( $post_id ) {

    // Text Field
    $text_field = $_POST['_ean_code'][ $post_id ];
    if( ! empty( $text_field ) ) {
        update_post_meta( $post_id, '_ean_code', esc_attr( $text_field ) );
    }
    $number_field = $_POST['_stock_amsterdam'][ $post_id ];
    if( ! empty( $number_field ) ) {
        update_post_meta( $post_id, '_stock_amsterdam', esc_attr( $number_field ) );
    }
    $number_field = $_POST['_stock_den_bosch'][ $post_id ];
    if( ! empty( $number_field ) ) {
        update_post_meta( $post_id, '_stock_den_bosch', esc_attr( $number_field ) );
    }
    $number_field = $_POST['_stock_alkmaar'][ $post_id ];
    if( ! empty( $number_field ) ) {
        update_post_meta( $post_id, '_stock_alkmaar', esc_attr( $number_field ) );
    }

}

// Save Variation Settings
add_action( 'woocommerce_save_product_variation', 'save_variation_settings_fields', 10, 2 );


// Add Variation Settings
add_action( 'woocommerce_product_after_variable_attributes', 'variation_settings_fields', 10, 3 );

0 个答案:

没有答案