如何在结帐验证期间取消设置woocommerce结帐字段

时间:2019-04-06 16:04:49

标签: php woocommerce checkout

在结帐期间,我想知道买方是公司还是个人。如果买家是公司,则需要向他们显示必填的公司名称和代码字段。但是,如果他们检查自己是个人,则不需要这些字段。

我尝试使用woocommerce_after_checkout_validation挂钩来检查是否已选中所需的单选按钮,并取消设置上述字段。但这是行不通的。

这些是我创建的字段:

//Custom checkout fields for companies
function imones_kodas_add_checkout_fields( $fields ) {
    $fields[ 'billing_imones_kodas' ] = array(
        'label' => __( 'Įmonės kodas' ),
        'type' => 'text',
        'class' => array( 'form-row-wide' ),
        'priority' => 35,
        'required' => true,
    );

    return $fields;
}
add_filter( 'woocommerce_billing_fields', 'imones_kodas_add_checkout_fields' );

function pvm_add_checkout_fields( $fields ) {
    $fields[ 'billing_pvm_kodas' ] = array(
        'label' => __( 'PVM kodas' ),
        'description' => 'Jei esate PVM mokėtojas, būtinai nurodykite įmonės PVM mokėtojo kodą',
        'type' => 'text',
        'class' => array( 'form-row-wide' ),
        'priority' => 36,
        'required' => false,
    );

    return $fields;
}
add_filter( 'woocommerce_billing_fields', 'pvm_add_checkout_fields' );

function imone_privatus_checkout_radio( $fields ) {
    $fields[ 'billing_radio' ] = array(
        'label' => __( 'Pasirinkite kas perka' ),
        'type' => 'radio',
        'class' => array( 'form-row-wide' ),
        'priority' => 5,
        'required' => true,
        'options' => array(
            'privatus_asmuo' => 'Privatus asmuo',
            'imone' => 'Įmonė',
        ),
    );

    return $fields;
}
add_filter( 'woocommerce_billing_fields', 'imone_privatus_checkout_radio' );

这是我尝试检查选中的单选按钮,然后取消设置字段的方法。

add_action( 'woocommerce_after_checkout_validation', 'misha_validate_fname_lname', 100, 2);

function misha_validate_fname_lname( $fields, $errors ){
    if($fields[ 'billing_radio' ] == 'privatus_asmuo'){
        unset( $fields[ 'billing' ][ 'billing_pvm_kodas' ] );
        unset( $fields[ 'billing' ][ 'billing_imones_kodas' ] );
        unset( $fields[ 'billing' ][ 'billing_company' ] );
        $fields[ 'billing' ][ 'billing_pvm_kodas' ]['required'] = false;
        $fields[ 'billing' ][ 'billing_imones_kodas' ]['required'] = false;
        $fields[ 'billing' ][ 'billing_company' ]['required'] = false;
        return $fields;

    }
}

最后,如果单选按钮被选中为“ privatus_asmuo”,则不应验证与公司相关的字段。 有没有办法使用PHP解决此问题?还是我需要使用JS?如果是,该怎么办?

0 个答案:

没有答案