从Admin WooCommerce产品数据元变量中保存自定义字段数据

时间:2017-08-30 06:51:16

标签: php wordpress woocommerce custom-fields product

在Woocommerce中,我使用一些自定义字段来表示产品规格,并将规格保存在post_meta中。

我正在尝试在post_meta另一个产品规范中写下if循环。

我现在使用的代码是:

add_action( 'woocommerce_product_options_general_product_data', 'BTW_field' );
function BTW_field() {
    woocommerce_wp_radio( 
        array( 
            'id'          => '_BTW', 
            'default'     => '21% BTW', 
            'required' => true,
            'options' => array(
                'Prijs is incl. 21% BTW'   => '21% BTW',
                'Margeproduct'   => 'Marge Product',
            )
        )
    );
}

add_action( 'woocommerce_process_product_meta', 'BTW_save' );
function BTW_save( $post_id ){  
    $BTW = $_POST['_BTW'];
    if( !empty( $BTW ) )
        update_post_meta( $post_id, '_BTW', esc_attr( $BTW ) );
}

现在我尝试重写BTW_save函数,以便保存另一个post_meta

function BTW_save( $post_id ){  
$BTW = $_POST['_BTW'];
    if( !empty( $BTW ) ){
        update_post_meta( $post_id, '_BTW', esc_attr( $BTW ) );
    }
    if ($BTW == "Margeproduct (vrijgesteld van BTW)"){
        $BTW2 = "Margeproduct*"
    } else {
        $BTW2 = "21%"
    }
    update_post_meta( $post_id, '_BTW_NAME', esc_attr( $BTW2 ) );
}

我不知道如何检查$BTW是否等于post_meta _BTW以及我如何重写它以便$BTW2也会保存在帖子中meta为_BTW_NAME

1 个答案:

答案 0 :(得分:0)

已更新:在设置2个不同的值时,最好使用选择字段。

此外,我在代码中对正确的变量命名和字段键命名进行了一些更改(您应该能够轻松地重命名它们,并记住建议使用小写和下划线)。

以下是代码:

add_action( 'woocommerce_product_options_general_product_data', 'add_btw_field' );
function add_btw_field() {
    global $post;

    // Get the selected value
    $value = get_post_meta( $post->ID, '_btw', true );
    if( empty( $value ) ) $value = 'btw'; // Default value

    woocommerce_wp_select( array(
        'id'       => 'btw_select',
        'label'    => __( 'BTW-prijsopties', 'woocommerce' ),
        'options'  => array(
            'btw'  => __( '21% BTW', 'woocommerce' ),
            'marge'   => __( 'Marge Product', 'woocommerce' ),
        ),
        'value'   => $value, // Displaying the selected value
    ) );
}

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

    if( empty( $_POST['btw_select'] ) ) return; // exit (in case of)

    update_post_meta( $post_id, '_btw', esc_attr( $_POST['btw_select'] ) );

    if ( $_POST['btw_select'] == 'btw' )
        $label = __( 'BTW 21%', 'woocommerce' );
    else
        $label = __( 'Margeproduct (vrijgesteld van BTW)', 'woocommerce' );

    update_post_meta( $post_id, '_btw_label', esc_attr( $label ) );
}

代码放在活动子主题(或主题)的function.php文件中,或者放在任何插件文件中。

经过测试和工作。你会得到类似的东西:

enter image description here

创建或更新产品时,

默认,两个自定义字段都会保存为< btw'选项作为产品元数据......

  

您可以使用post_meta获取两个产品get_post_meta()自定义字段值:

// Set HERE the product ID (or get it dynamically)
$product_id = 37;
$btw = get_post_meta( $product_id, '_btw', true ); // Values can be 'yes' or 'no'
$btw_label = get_post_meta( $product_id, '_btw_label', true );

// Output (testing):
echo $btw_label;