首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >基于发货方法的Woocommerce显示/隐藏签出字段,并使其在显示时成为必需字段

基于发货方法的Woocommerce显示/隐藏签出字段,并使其在显示时成为必需字段
EN

Stack Overflow用户
提问于 2016-08-19 10:49:40
回答 1查看 3.5K关注 0票数 0

只有当delivery_datetime_field在结帐页面上被选中时,我才试图在woocommerce上显示shipping_method_0_local_pickup_plus结账字段。

我试图通过基于本指南来构建这个函数,以隐藏虚拟产品的签出字段。

但是,我一直收到致命错误:签出页面中不支持的操作数类型。

代码语言:javascript
运行
复制
add_filter( 'woocommerce_checkout_fields' , 'woo_remove_billing_checkout_fields' );
function woo_remove_billing_checkout_fields( $fields ) {
if ($chosen_methods[0] == 'shipping_method_0_local_pickup_plus'){
if( woo_cart_has_virtual_product() == true ) {
    unset($fields['billing']['delivery_datetime_field']);
}   
return $fields;
}
 if( count($products) == $virtual_products )
$has_virtual_products = true;  
return $has_virtual_products;
 }

有人有办法解决这个问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-29 02:49:19

我在本地的皮卡加插件上编辑了一点,如果有人需要的话,我已经做到了:

代码语言:javascript
运行
复制
if ( localPickupPlusOnly && ! $( '#ship-to-different-address-checkbox' ).prop( 'checked' ) ) {
                        // only local pickup plus is being used, hide the shipping address fields
                        $( '#shiptobilling, #ship-to-different-address' ).hide();
                        $( '#delivery_datetime_field' ).show();
                        $( '#shiptobilling, #ship-to-different-address' ).parent().find( 'h3' ).hide();
                        $( '.shipping_address' ).hide();
                    } else {
                        // some other shipping method is being used, show the shipping address fields
                        $( '#shiptobilling, #ship-to-different-address' ).show();
                        $( '#delivery_datetime_field' ).hide();
                        $( '#shiptobilling, #ship-to-different-address' ).parent().find( 'h3' ).show();
                        if ( ( $( '#shiptobilling input' ).length > 0 && ! $( '#shiptobilling input' ).is( ':checked' ) ) || $( '#ship-to-different-address input' ).is( ':checked' ) ) {
                            $( '.shipping_address' ).show();
                        }
                    }

现在唯一的问题是,虽然是隐藏的,但如果delivery_datetime_field作为必需字段启用,则不会签出。我只希望该字段是必需的,如果选择本地收件在结帐时。

如果有人在寻找解决方案:

代码语言:javascript
运行
复制
add_filter( 'woocommerce_checkout_fields', 'local_pickup_disable' );
function local_pickup_disable( $local_pickup ) {
    global $woocommerce;
    $chosen_methods = WC()->session->get( 'chosen_shipping_methods' );
    $chosen_shipping = $chosen_methods[0];

    if( $chosen_shipping == 'local_pickup_plus' ) {
/**
 * Process the local_pickup checkout
 */
add_action('woocommerce_checkout_process', 'my_custom_checkout_local_pickup_process');

function my_custom_checkout_local_pickup_process() {
    // Check if set, if its not set add an error.
    if ( ! $_POST['delivery_datetime'] )
        wc_add_notice( __( 'Please let us know when you plan to pick up your order by selecting a collection date.' ), 'error' );
    else
        /**
* Update the order meta with Pick Up question
**/
add_action('woocommerce_checkout_update_order_meta', 'my_pickup_field_update_order_meta', 10, 2);
function my_pickup_field_update_order_meta( $order_id, $posted ) {
    if ( $_POST['delivery_datetime'] ) {
        update_post_meta( $order_id, '_e_deliverydate', esc_attr($_POST['delivery_datetime']));
    }
}
/**
 * Add the Pick Up custom fields to order emails
 **/
add_filter('woocommerce_email_order_meta_keys', 'my_pickup_checkout_field_order_meta_keys');
function my_pickup_checkout_field_order_meta_keys( $keys ) {
    $label_name = __("Pick Up Date","delivery_datetime");
    $keys[$label_name] = "Pick Up Date";
    return $keys;
}   

}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39037163

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档