当前位置: 首页 > 知识库问答 >
问题:

在WooCommerce中取消设置条件自定义签出字段

常翰
2023-03-14

在WooCommerce结帐表单中,我自定义了字段。但是,如果产品属于特定类别,我不希望显示这些字段。我让那部分工作。

接下来,我想取消设置一些自定义签出字段,但我不知道如何取消设置或现在取消设置。取消设置普通签出字段很容易,例如,我使用以下代码:

unset( $fields['billing']['billing_company'] );

然而,对于自定义结帐字段它不起作用。下面是我如何设置这个自定义字段:

    function company_details_section($checkout)
{
    woocommerce_form_field('delegate_1_name', array(
        'type' => 'text',
        'class' => array(
            'my-field-class form-row-wide delegateExists'
        ) ,
        'label' => __('Full name') ,
    ) , $checkout->get_value('delegate_1_name'));
}

由于这属于它自己的部分,而不是账单、发货或其他字段,我找不到删除它的方法

我尝试了以下方法:

unset( $fields['delegate_1_name'] );
unset( $fields['additional']['delegate_1_name'] );
unset( $fields['billing']['delegate_1_name'] );
unset( $fields['shipping']['delegate_1_name'] );
unset( $fields['company_details_section']['delegate_1_name'] );

这是我用来取消设置字段的条件函数:

function wc_ninja_product_is_in_the_cart() {
    // Add your special product IDs here
    $ids = array( '45', '70', '75' );;

    // Products currently in the cart
    $cart_ids = array();

    // Find each product in the cart and add it to the $cart_ids array
    foreach( WC()->cart->get_cart() as $cart_item_key => $values ) {
        $cart_product = $values['data'];
        $cart_ids[]   = $cart_product->id;
    }

    // If one of the special products are in the cart, return true.
    if ( ! empty( array_intersect( $ids, $cart_ids ) ) ) {
        return true;
    } else {
        return false;
    }
}

这是取消设置正常签出字段的功能代码:

function wc_ninja_remove_checkout_field( $fields ) {
    if ( ! wc_ninja_product_is_in_the_cart() ) {
        unset( $fields['billing']['billing_company'] );
    }

    return $fields;
}
add_filter( 'woocommerce_checkout_fields' , 'wc_ninja_remove_checkout_field' );

如何在WooCommerce中取消设置自定义签出字段(不是经典字段)?

共有1个答案

弘柏
2023-03-14

您不能取消设置自定义签出字段,因为它不是像默认签出字段那样在数组中设置的。

因此,您应该在自定义字段创建代码中直接使用条件函数。我还重访了一下您现有的代码:

// Conditional function: If one of the special products is in cart return true, else false
function is_in_cart() {
    // Add your special product IDs here
    $ids = array( 45, 70, 75 );

    foreach( WC()->cart->get_cart() as $cart_item ){
        $product_id = version_compare( WC_VERSION, '3.0', '<' ) ? $cart_item['data']->id : $cart_item['data']->get_id();
        if( in_array( $cart_item['data']->get_id(), $ids ) )
            return true;
    }
    return false;
}

add_filter( 'woocommerce_checkout_fields' , 'remove_checkout_fields', 10, 1 );
function remove_checkout_fields( $fields ) {
    if( ! is_in_cart() )
        unset($fields['billing']['billing_company']);

    return $fields;
}

add_action( 'woocommerce_after_order_notes', 'company_details_section', 10, 1 );
function company_details_section( $checkout ){
    // Here your conditional function
    if( is_in_cart() ){

        echo '<div id="my_custom_checkout_field"><h3>' . __('Company Details') . '</h3>';

        woocommerce_form_field( 'delegate_1_name', array(
            'type' => 'text',
            'class' => array( 'my-field-class form-row-wide delegateExists' ),
            'label' => __('Full name') ,
        ) , $checkout->get_value( 'delegate_1_name' ) );

        echo '</div>';
    }
}

代码进入函数。活动子主题(或主题)或任何插件文件中的php文件。

自2.5版起,所有WooCommerce版本均经过测试并适用。十、

 类似资料:
  • 我可以从账单和运输中取消设置字段,但为什么我不能从其他字段部分取消设置字段。我在这些字段上添加了一个条件。也许我用错了元键。 使用此插件创建字段签出字段编辑器

  • 我有一些Woocommerce产品要求客户(或产品接收者)提供出生日期。客户在创建账户结帐时需要提供出生日期,所以我在这里设置好了,但是如果选中了“发货到其他地址”,并且购物车中的任何项目都需要出生日期,我需要在发货部分添加一个必需的DOB字段。 以下是我尝试过的: 当购物车中的产品需要出生日期时,就可以这样做——添加了自定义字段。但是如果购物车中没有产品需要DOB,那么所有结账字段都不会加载,既

  • 遵循电子商务签出字段自定义文档: 使用操作和筛选器自定义签出字段 我已经通过函数向woocommerce结帐页面添加了一个自定义字段。php。 我担心是否必须清理自定义字段的用户输入? 我认为它不需要消毒,因为它被传递到帐单字段中,如:$fields['billing'],对吗? 如果没有,我如何清理这个自定义字段? 创建此自定义字段意味着接受长度不超过50的文本字符串(拉丁文)和整数的组合。

  • 我正在使用WooCommerce REST API(http://WooCommerce.github.io/woocommerce-rest-api-docs/#introduction),并使用下面的示例在结帐页面中添加了一个新字段(shipping_phone): https://docs.woocommerce.com/document/tutorial-customising-check

  • 我想在WooCommerce结帐页面中添加自定义字段,但用于选定的产品。 例如,如果客户的购物车中只有产品A,则此自定义字段应显示在WooCommerce签出页面中 我在函数中使用以下代码。php添加自定义字段:

  • WooCommerce的设置指仪表盘 - WooCommerce - 设置下的选项卡,有常规、产品、配送等等。很多WooCommerce插件会在这里增加自己的设置选项,它们是怎么做的呢?本文将介绍向WooCommerce设置里添加自定义选项卡和字段的方法。 WooCommerce设置 – 向产品设置里添加自定义选项卡和字段 目标:如上图所示,在产品选项卡下添加Example Section,里面就