wordpress 在Woocommerce中添加并保存管理员产品变化自定义字段

sr4lhrrt  于 2022-11-22  发布在  WordPress
关注(0)|答案(1)|浏览(125)

因此,我得到了下面的代码,它使我向产品的Inventory Options中添加了一个Barcode字段。
现在,我也想添加到每个变化,这样我就可以很容易地添加变化产品时,我通过WooCommerce销售点插件扫描产品的条形码。
以下是我目前得到的结果:

// Add Barcode field in simple product inventory options
add_action('woocommerce_product_options_sku','add_barcode',10,0);
function add_barcode(){
    global $woocommerce,$post;
    woocommerce_wp_text_input(
        array(
            'id'          => '_barcode',
            'label'       => __('Barcode','woocommerce'),
            'placeholder' => 'Scan Barcode',
            'desc_tip'    => 'true',
            'description' => __('Scan barcode.','woocommerce'),
            'value'       => get_post_meta($post->ID,'_barcode',true)
        )
    );
}

// Save Barcode field value for simple product inventory options
add_action('woocommerce_process_product_meta','save_barcode',10,1);
function save_barcode($post_id){
    if(!empty($_POST['_barcode']))
    update_post_meta($post_id,'_barcode',sanitize_text_field($_POST['_barcode']));
}

// Add a Barcode field in product variations options
add_action('woocommerce_product_after_variable_attributes','add_barcode_variations',10,3);
function add_barcode_variations($loop,$variation_data,$variation){
    woocommerce_wp_text_input(
        array(
            'id'          => '_barcode[' . $variation->ID . ']',
            'label'       => __('Variation Barcode','woocommerce'),
            'placeholder' => 'Scan Barcode',
            'desc_tip'    => 'true',
            'description' => __('Scan barcode.','woocommerce'),
            'value'       => get_post_meta($variation->ID,'_barcode',true)
        )
    );
}

// Save Barcode field for product variations options
add_action( 'woocommerce_save_product_variation','save_barcode_variations',10,2);
function save_barcode_variations($post_id){
    $barcode = $_POST['_barcode'][$post_id];
    if(!empty($barcode)) update_post_meta($post_id,'_barcode',sanitize_text_field($barcode));
}

// Set POS Custom Code
add_filter('woocommerce_pos_barcode_meta_key','pos_barcode_field');
function pos_barcode_field(){
    return '_barcode';
}

但这里的问题是,我现在添加了一个部分的变化,如果我更新产品的主要条形码字段中的库存设置显示“阵列”,而不是提供的条形码。
我认为这与ID是相同的变化,作为原始字段,而不是variationID在最后。ID需要与我使用的WooCommerce POS插件相同的原因是,当我扫描产品时,在该ID上被过滤。
但目前无法弄清楚,我必须更改哪些内容才能使库存条形码字段和变体条形码字段正确保存。
我还想在variation SKU字段下面添加variation字段,但无法直接找到合适的钩子来完成此操作。
提前感谢您提供更多信息。

xzv2uavs

xzv2uavs1#

在你最后一个钩子函数中,你有一个丢失的参数,它与你第三个函数中的**$loop**参数类似。所以我在你的代码中做了一些小的修改:

// Add product Barcode custom field
add_action('woocommerce_product_options_sku','add_barcode_custom_field' );
function add_barcode_custom_field(){
    woocommerce_wp_text_input( array(
        'id'          => '_barcode',
        'label'       => __('Barcode','woocommerce'),
        'placeholder' => 'Scan Barcode',
        'desc_tip'    => 'true',
        'description' => __('This is the Scan barcode field for this product.','woocommerce')
    ) ); 
}

// Save product Barcode custom field
add_action( 'woocommerce_process_product_meta', 'save_barcode_custom_field', 10, 1 );
function save_barcode_custom_field( $post_id ){
    if( isset($_POST['_barcode']) )
        update_post_meta( $post_id, '_barcode', esc_attr( $_POST['_barcode'] ) );
}

// Add Variation Barcode custom field
add_action( 'woocommerce_variation_options_pricing', 'add_barcode_variation_custom_field', 10, 3 );
function add_barcode_variation_custom_field( $loop, $variation_data, $variation ){

    $variation_barcode = get_post_meta($variation->ID,"_barcode", true );
    if( ! $variation_barcode ) $variation_barcode = "";

    woocommerce_wp_text_input( array(
        'id'          => '_barcode['.$loop.']',
        'label'       => __('Variation Barcode','woocommerce'),
        'placeholder' => 'Scan Barcode',
        'desc_tip'    => 'true',
        'description' => __('This is the Scan barcode field for this variation.','woocommerce'),
        'value'       => get_post_meta($variation->ID,"_barcode", true ),
    ) );
}

// Save Variation Barcode custom field value
add_action( 'woocommerce_save_product_variation', 'save_barcode_variation_custom_field', 10, 2 );
function save_barcode_variation_custom_field( $variation_id, $i ){
    if( isset($_POST['_barcode'][$i]) )
        update_post_meta( $variation_id, '_barcode', sanitize_text_field($_POST['_barcode'][$i]) );
}

这段代码在你的活动子主题(或主题)的function.php文件中,也可以在任何插件文件中。
此代码经过测试,适用于WooCommerce 2.6+和3.0+版

相关问题