WooCommerce:如果购物车中有特定产品ID,则显示自定义结帐字段

时间:2019-05-12 19:16:34

标签: php wordpress woocommerce cart checkout

我正在经营一家销售烤架的网上商店。只有烤架通过需要其他信息的特定运输工具运送。

当购物车中有某个product_ID时,我设法显示了一个下拉菜单。选择特定值后,将显示一个文本区域。

这应该发生在大约10种产品上,而不仅仅是一种。

在阅读了多个线程并搜索了网络之后,我不知道如何添加多个product_ID。

add_action( 'woocommerce_after_order_notes', 'grills_versandauswahl_checkout_field' );
function grills_versandauswahl_checkout_field( $checkout ) {

    $grill_in_cart = grills_is_conditional_product_in_cart ( 125 );

    if ( $grill_in_cart === true ) {
        echo '<div id="my_custom_checkout_field"><h3>' . __(     'Versandoptionen' ) . '</h3><p style="margin: 0 0 8px;">text</p>';

        woocommerce_form_field( 'versandoption', array(
            'type'          => 'select',
            'class'         => array( 'wps-drop' ),
            'label'         => __( 'Versandoptionen' ),
            'required'      => true,
            'options'       => array(
                'blank'     => __( 'Ausw&auml;hlen', 'wps' ),
                'fixtermin' => __( 'Fixtermin', 'wps' ),
                'avis'      => __( 'Telefonisches Avis', 'wps' ),
            )
        ), $checkout->get_value( 'versandoption' ) );

        woocommerce_form_field( 'inscription_textbox', array(
            'type'  => 'textarea',
            'class' => array( 'inscription-text form-row-wide' ),
            'label' => __( 'Wunschtermin / Ablageort' ),
        ), $checkout->get_value( 'inscription_textbox' ) );

        echo '</div>';
    }
}

function grills_is_conditional_product_in_cart( $product_id ) {
    //Check to see if user has product in cart
    global $woocommerce;

    //flag no book in cart
    $grill_in_cart = false;

    foreach ( $woocommerce->cart->get_cart() as $cart_item_key => $values ) {
        $_product = $values['data'];

        if ( $_product->id === $product_id ) {
            //book is in cart!
            $grill_in_cart = true;
        }
    }
    return $grill_in_cart;
}

1 个答案:

答案 0 :(得分:0)

要使您的条件函数适用于许多产品ID,请使用以下代码:

// Custom conditional function
function grills_in_cart( $product_ids ) {
    foreach ( WC()->cart->get_cart() as $item ) {
        if ( array_intersect($product_ids, array( $item['product_id'], $item['variation_id']) ) ) {
            return true;
        }
    }
    return false;
}

// Conditionally display custom checkout fields for specific product IDS
add_action( 'woocommerce_after_order_notes', 'grills_versandauswahl_checkout_field' );
function grills_versandauswahl_checkout_field( $checkout ) {
    // Here define the targeted product IDs in this array
    $targeted_ids = array( 125, 132, 154 );
    $text_domain  = 'woocommerce';

    if ( grills_in_cart( $targeted_ids ) ) {
        echo '<div id="my_custom_checkout_field">
        <h3>' . __( "Versandoptionen", $text_domain ) . '</h3>
        <p style="margin: 0 0 8px;">' . __( "text", $text_domain ) . '</p>';

        woocommerce_form_field( 'versandoption', array(
            'type'     => 'select',
            'class'    => array('wps-drop'),
            'label'    => __( "Versandoptionen", $text_domain ),
            'required' => true,
            'options'  => array(
                'blank'     => __( "Ausw&auml;hlen", $text_domain ),
                'fixtermin' => __( "Fixtermin", $text_domain ),
                'avis'      => __( "Telefonisches Avis", $text_domain ),
            ),
        ), $checkout->get_value( 'versandoption' ) );

        woocommerce_form_field( 'inscription_textbox', array(
            'type'  => 'textarea',
            'class' => array( 'inscription-text form-row-wide' ),
            'label' => __( 'Wunschtermin / Ablageort', $text_domain ),
        ), $checkout->get_value( 'inscription_textbox' ) );

        echo '</div>';
    }
}

代码进入活动子主题(或活动主题)的functions.php文件中。经过测试,可以正常工作。

  

注意$global $woocommerce; + $woocommerce->cart已由WC()->cart

取代