WooCommerce如何在结账时添加我的自定义字段复选框,当我选中它时,隐藏发货地址并添加19%的税

时间:2016-04-01 作者:kiriaki

您好,我正在使用虚拟产品页面中工作,我需要这样做

所以我想这样做,我想有一个名为“Personal”的复选框,所以当单击“hide right way the company name Address”等时,我还想加税19%,当没有加税时,单击“add tax zero”

我已经使用了这个代码,我不知道如何为我的复选框获取值,所以当它为真时,我会加19%的税,并隐藏公司、地址、电话等名称,当它为假时,税为零

还有一个想法是,我如何获得选择国家,并检查是否在欧洲,以及我如何获得该值

编辑:如果可能,仅当国家i\'t不在欧洲时才添加复选框,

谁能帮我一下吗,谢谢

我附上一些图片以便更好地理解

检查时http://i.imgur.com/jwH2i2L.png

如果不是http://i.imgur.com/zyB9elJ.png

/**
 * Add checkbox field to the checkout
 **/
add_action(\'woocommerce_after_order_notes\', \'my_custom_checkout_field\');

function my_custom_checkout_field( $checkout ) {

    woocommerce_form_field( \'my_checkbox\', array(
        \'type\'          => \'checkbox\',
        \'class\'         => array(\'input-checkbox\'),
        \'label\'         => __(\'Personal\'),
        \'required\'  => false,
        ), $checkout->get_value( \'my_checkbox\' ));
}

/**
 * Process the checkout
 **/
add_action(\'woocommerce_checkout_process\', \'my_custom_checkout_field_process\');

function my_custom_checkout_field_process() {
    global $woocommerce;

    // Check if set, if its not set add an error.
    if (!$_POST[\'my_checkbox\'])
    {
         $woocommerce->add_error( __(\'Please agree to my checkbox.\') ); 
    }
}

/**
 * Update the order meta with field value
 **/
add_action(\'woocommerce_checkout_update_order_meta\', \'my_custom_checkout_field_update_order_meta\');

function my_custom_checkout_field_update_order_meta( $order_id ) {
    if ($_POST[\'my_checkbox\']) update_post_meta( $order_id, \'My Checkbox\', esc_attr($_POST[\'my_checkbox\']));


/**
 * Make Tax Zero When it\'s my_checkbox False dosen\'t work again :(
 **/

add_filter( \'woocommerce_product_tax_class\', \'wc_diff_rate_for_user\', 1, 2 );
function wc_diff_rate_for_user( $tax_class, $product ) {
    if (!$_POST[\'my_checkbox\']) {
        $tax_class = \'Zero Rate\';
    }
    return $tax_class;
}

/**
 * hide filters when checkbox my_checkbox it\'s True dosen\'t work again :(
 **/

add_filter( \'woocommerce_checkout_fields\' , \'woo_remove_billing_checkout_fields\' );
function woo_remove_billing_checkout_fields( $fields ) {

    if($_POST[\'my_checkbox\']) {
        unset($fields[\'billing\'][\'billing_company\']);
        unset($fields[\'billing\'][\'billing_address_1\']);
        unset($fields[\'billing\'][\'billing_address_2\']);
        unset($fields[\'billing\'][\'billing_city\']);
        unset($fields[\'billing\'][\'billing_postcode\']);
        unset($fields[\'billing\'][\'billing_country\']);
        unset($fields[\'billing\'][\'billing_state\']);
        unset($fields[\'billing\'][\'billing_phone\']);
        unset($fields[\'order\'][\'order_comments\']);
        unset($fields[\'billing\'][\'billing_address_2\']);
        unset($fields[\'billing\'][\'billing_postcode\']);
        unset($fields[\'billing\'][\'billing_company\']);
        unset($fields[\'billing\'][\'billing_city\']);
    }

    return $fields;
}

}

1 个回复
最合适的回答,由SO网友:LoicTheAztec 整理而成

CLARIFICATION FOR ALL :

您在商店中使用虚拟产品。

在…上checkout page, 您已创建并设置additional checkbox 对于european VAT 意图

有3个案例与此复选框相关

复选框隐藏(默认)当所选国家为欧洲国家时,复选框可见:

  • 复选框禁用(默认)=>将增值税值设置为“0”(不应用增值税)
  • 复选框已启用:
    1. 增值税正常应用
    2. 隐藏(取消设置)账单明细中除电子邮件字段和国家/地区选择器以外的所有字段

WHAT IS NOT WORKING

您的php函数与复选框检测状态相关,因为您使用$_POST[\'my_checkbox\'] 但您没有发布(提交)任何内容,您只有表单项的启用/禁用状态。

WHAT DO YOU NEED TO DO (not done yet) :

<定义欧洲国家=>可见复选框状态您需要使用javascript/jQuery.select() javascript和wordpress中用于检测和Ajax的窗体事件
阅读本文:5 TIPS FOR USING AJAX IN WORDPRESS. 您可以搜索并找到许多与wordpress ajaxform element detection state 通过此论坛线程

相关推荐

如何让`wp-list-table`显示我在Custom-Post中的`Custom-Fields`

一切都好吗<我需要wp-list-table 也要显示custom-fields 在每个custom-post 我有,但我不知道如何做到这一点,在这幅图中,它显示了带有字段的表格:Title, Author and Publication Date: 我想要的是能够选择custom-fields 将出现,例如以下示例Title, Carta, Naipe, Author, and Date of Publication: