WooCommerce根据数量添加产品字段

时间:2016-07-29 08:26:05

标签: wordpress woocommerce

美好的一天。

有没有办法根据所选产品的数量动态地在WooCommerce中为产品添加输入字段?

我找到了许多可以有静态字段的解决方案,但没有自动更新的解决方案。例如,如果我在产品页面中有3个数量,则为每个产品添加名称,单元格编号和电子邮件地址,并且是必填字段。

我见过的选项是:

https://wordpress.org/plugins/woo-checkout-field-editor-pro/

https://wordpress.org/plugins/wc-fields-factory/

1 个答案:

答案 0 :(得分:1)

假设您在WooCommerce商店中有一个预订系统,并且如果有人预订的数量超过一个,则要在结帐时获取其他信息。例如,如果您有活动/车间网站,并想捕获参加活动/车间的每个人的名称,电子邮件,电话和地址,并且有人在您的网站上预订了3种数量的书,则您需要其他动态自定义字段来捕获详细信息其他2位参与者中。因此,如果某人将3个数量添加到购物车中,那么结帐页面会为其他2个参与者添加其他字段;如果4个数量添加到购物车中,那么它会为其他3个参与者添加字段。

在以下功能中,我们将检查用户购物车中有多少数量,如果数量大于1,则将其他字段添加到结帐页面。并保存字段值以在admin中按顺序显示一侧。

转到您的functions.php文件,并在文件末尾添加以下代码,或者您可以创建自己的插件来添加此功能。

//Custom WooCommerce Checkout Fields based on Quantity
add_action( 'woocommerce_before_order_notes', 'person_details' );

function person_details($checkout) {
    global $woocommerce;
$count = $woocommerce->cart->cart_contents_count;
$i = 1;
       for($k=2; $k<= $count; $k++) {
        $i++;
           print ('<h3>Please enter details of attendee '.$i.'</h3>');
        woocommerce_form_field( 'cstm_full_name'.$i, array(
            'type'          => 'text',
            'class'         => array('my-field-class form-row-wide'),
            'label'         => __('Full name'),
            'placeholder'   => __('Enter full name'),
            ),
            $checkout->get_value( 'cstm_full_name'.$i ));
        echo '<div class="clear"></div>';
        woocommerce_form_field( 'cstm_phone'.$i, array(
            'type'          => 'text',
            'class'         => array('my-field-class form-row-first'),
            'label'         => __('Phone'),
            'placeholder'   => __('Enter phone number'),
            ),
            $checkout->get_value( 'cstm_phone'.$i ));
        woocommerce_form_field( 'cstm_email'.$i, array(
            'type'          => 'email',
            'class'         => array('my-field-class form-row-last'),
            'label'         => __('Email address'),
            'placeholder'   => __('Enter email address'),
            ),
            $checkout->get_value( 'cstm_email'.$i ));
        echo '<div class="clear"></div>';
        woocommerce_form_field( 'cstm_address'.$i, array(
            'type'          => 'textarea',
            'class'         => array('my-field-class form-row-wide'),
            'label'         => __('Full address'),
            'placeholder'   => __('Enter full address'),
            ),
            $checkout->get_value( 'cstm_address'.$i ));
}
}

/**
 * Save value of fields
 */

add_action('woocommerce_checkout_update_order_meta', 'customise_checkout_field_update_order_meta');

function customise_checkout_field_update_order_meta($order_id)
{
    global $woocommerce;
$count = $woocommerce->cart->cart_contents_count;
$i = 1;
       for($k=2; $k<= $count; $k++) {
        $i++;
    if (!empty($_POST['cstm_full_name'.$i])) {
        update_post_meta($order_id, 'Name of Attendee'.$i, sanitize_text_field($_POST['cstm_full_name'.$i]));
    }
    if (!empty($_POST['cstm_phone'.$i])) {
        update_post_meta($order_id, 'Phone of Attendee'.$i, sanitize_text_field($_POST['cstm_phone'.$i]));
    }
    if (!empty($_POST['cstm_email'.$i])) {
        update_post_meta($order_id, 'Email of Attendee'.$i, sanitize_text_field($_POST['cstm_email'.$i]));
    }
    if (!empty($_POST['cstm_address'.$i])) {
        update_post_meta($order_id, 'Address of Attendee'.$i, sanitize_text_field($_POST['cstm_address'.$i]));
    }
}
}

结帐页面上的动态自定义字段 enter image description here

管理员订单页面上的“自定义字段”值 enter image description here

Reference