基于数量的Woocommerce自定义字段

时间:2019-08-15 20:16:04

标签: wordpress woocommerce checkout

我想实现一个功能,当我的woocommerce订单上的数量更改(例如更改为2)时,应该出现2个文本字段,用户可以在其中输入2个名称和2个图像上载字段。

我找到了一些代码并在我的function.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>Infos Spieler Nr. '.$i.'</h3>');


    woocommerce_form_field( 'cstm_full_name'.$i, array(
        'type'          => 'text',
        'class'         => array('my-field-class form-row-wide'),
        'label'         => __('Name'),
        'placeholder'   => __('Name eingeben'),
        ),
        $checkout->get_value( 'cstm_full_name'.$i ));

    echo '<div class="clear"></div>';

    woocommerce_form_field( 'cstm_nation'.$i, array(
        'type'          => 'text',
        'class'         => array('my-field-class form-row-first'),
        'label'         => __('Nationalitaet'),
        'placeholder'   => __('Deutsch'),
        ),
        $checkout->get_value( 'cstm_nation'.$i ));


    woocommerce_form_field( 'cstm_nummer'.$i, array(
        'type'          => 'text',
        'class'         => array('my-field-class form-row-last'),
        'label'         => __('Nummer'),
        'placeholder'   => __('9'),
        ),
        $checkout->get_value( 'cstm_nummer'.$i ));


    echo '<div class="clear"></div>';
    woocommerce_form_field( 'cstm_position'.$i, array(
        'type'          => 'text',
        'class'         => array('my-field-class form-row-wide'),
        'label'         => __('Position'),
        'placeholder'   => __('ST'),
        ),
        $checkout->get_value( 'cstm_position'.$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'.$i,     sanitize_text_field($_POST['cstm_full_name'.$i]));
}
if (!empty($_POST['cstm_nation'.$i])) {
    update_post_meta($order_id, 'Nation'.$i, sanitize_text_field($_POST['cstm_nation'.$i]));
}
if (!empty($_POST['cstm_nummer'.$i])) {
    update_post_meta($order_id, 'Nummer'.$i, sanitize_text_field($_POST['cstm_nummer'.$i]));
}
if (!empty($_POST['cstm_position'.$i])) {
    update_post_meta($order_id, 'Position'.$i, sanitize_text_field($_POST['cstm_position'.$i]));
}
}
}

问题是:我对使用wordpress编码不了解很多。因此,我希望有所帮助。 我自定义了代码,但是我需要一个额外的上传字段,客户可以在其中上传图片。我需要在woocommerce订单的后端中看到它(我已经在后端中看到了自定义文本字段,这是可行的)。我找到了一些代码,这在前端工作正常,但是我在后端看不到图片。这是代码:

//For upload image

add_filter( 'woocommerce_shipping_fields', 
'woo_filter_upload_shipping'        );

function woo_filter_upload_shipping( $address_fields ) { 
//  $address_fields['file_upload']['required'] = true;

$address_fields['file_upload'] = array(
//'label'     => __('Upload your ID', 'woocommerce'),
'required'  => false,
'class'     => array('form-row-wide'),
'clear'     => true
);

 return $address_fields;
 }

 //Using this function to show Upload field on your checkout page.

 function add_file_field(){

 $uploadFile   = "";
 $uploadFile   .='<div id="upload_CNIC_image">';
 $uploadFile .='<input id="file_upload" name="file_upload"
 type="file"    multiple="true">';
 $uploadFile .='<span id="">';
 $uploadFile .='</span>';
 $uploadFile .='</div>';
 echo $uploadFile;
 }
 add_action('woocommerce_after_order_notes','add_file_field');

我需要第一个代码中的上传代码,以便它与其他texfields一起出现。

这两个代码也都显示在结帐站点上。当客户实时更改其更新数量时,是否可以在产品站点上直接显示此信息?

希望我的意思是可以理解的。

谢谢!

0 个答案:

没有答案