seçilen ürün miktarına göre ek alanlar

Forumlar WordPress Geliştirme seçilen ürün miktarına göre ek alanlar

  • Post
    admin
    Anahtar yönetici

    Ders kayıtlarını satmak için bir site yapmam gerekiyor ve bunu yapmak için woocomerce kullanıyorum.
    Kurslara hem bireysel kişiler hem de çalışanları için çoklu kayıt yapacak şirketler kayıt olacak, eğer tek kişi ise standart woocomerce checkout gibi alanların doldurulmasını isterim. Aksi takdirde, bir şirket ise (aynı kursa daha fazla kayıt yaptırmam gerekiyor), şirket verileri için standart alanlar ve üründe seçilen miktara göre tekrarlanan çalışan verileri için alanlar. Sipariş tamamlandığında, sipariş sayfasındaki ve e-postalardaki tüm verileri görmem gerekiyor.
    denedim [this plug-in][1], çalışıyor ama miktara göre bir grup alan gösteremiyorum, sizce bu özellik bir şekilde eklenebilir mi? yoksa buldum [this code][2]

    function person_details( $checkout ) {
    
        global $woocommerce;
        $count = $woocommerce->cart->cart_contents_count;
        $i = 0;
    
        for( $k=1; $k<= $count; $k++ ) {
            $i++;
            print ('Dati iscritto n. '.$i.'');
            
            woocommerce_form_field( 'cstm_full_name'.$i, array(
                'type'          => 'text',
                'class'         => array('my-field-class form-row-first'),
                'label'         => __('Nome e cognome'),
                'placeholder'   => __(''),
                'required' => true,
            ), $checkout->get_value( 'cstm_full_name'.$i ));
            
            
            
                woocommerce_form_field( 'cstm_email'.$i, array(
                    'type'          => 'email',
                    'required' => true,
                    'class'         => array( 'my-field-class form-row-last' ),
                    'label'         => __( 'Email' ),
                    
                ), $checkout->get_value( 'cstm_email'.$i ));
                
                woocommerce_form_field( 'cstm_phone'.$i, array(
                    'type'          => 'text',
                    'class'         => array('my-field-class form-row-first'),
                    'label'         => __('Numero di telefono'),
                    'placeholder'   => __(''),
                    'required' => true,
                ), $checkout->get_value( 'cstm_phone'.$i ));
                
                woocommerce_form_field( 'cstm_address'.$i, array(
                    'type'          => 'textarea',
                    'class'         => array('my-field-class form-row-last'),
                    'label'         => __('Indirizzo di residenza'),
                    'placeholder'   => __(''),
                    'required' => true,
                ), $checkout->get_value( 'cstm_address'.$i ));
            echo '
    '; echo '
    '; } } add_action( 'woocommerce_before_order_notes', 'person_details' );
    function customise_checkout_field_update_order_meta($order_id)
    {
        global $woocommerce;
        $count = $woocommerce->cart->cart_contents_count;
        $i = 0;
        for($k=1; $k<= $count; $k++) {
            $i++;
            if (!empty($_POST['cstm_full_name'.$i])) {
                update_post_meta($order_id, 'Nome e cognome'.$i, sanitize_text_field($_POST['cstm_full_name'.$i]));
            }
            if (!empty($_POST['cstm_email'.$i])) {
                update_post_meta($order_id, 'email'.$i, sanitize_text_field($_POST['cstm_email'.$i]));
            }
            if (!empty($_POST['cstm_phone'.$i])) {
                update_post_meta($order_id, 'Numero di telefono'.$i, sanitize_text_field($_POST['cstm_phone'.$i]));
            }
            if (!empty($_POST['cstm_address'.$i])) {
                update_post_meta($order_id, 'Indirizzo di residenza'.$i, sanitize_text_field($_POST['cstm_address'.$i]));
            }
            /*if ( isset( $_POST['cstm_groep'.$i] )){
                $value = sanitize_text_field( $_POST['cstm_groep'.$i] );
                update_post_meta( $post->ID, 'cstm_groep'.$i, $value );  
            }*/
        }
    }
    add_action('woocommerce_checkout_update_order_meta', 'customise_checkout_field_update_order_meta');
    
    function add_email_custom_order_meta( $order, $sent_to_admin, $plain_text ){
    
        $quantity = 0;      
        foreach ( $order->get_items() as $item_id => $item ) {
            $quantity = $quantity + $item->get_quantity();
        }
        
        $order_id = $order->get_order_number();
        echo "
      "; $i = 0; for( $k=1; $k <= $quantity; $k++ ) { $i++; echo "
    • Nome e cognome: ".get_post_meta($order_id, 'Nome e cognome'.$i, true )."
    • "; echo "
    • Email: ".get_post_meta($order_id, 'Email'.$i, true )."
    • "; echo "
    • Numero di telefono: ".get_post_meta($order_id, 'Numero di telefono'.$i, true )."
    • "; echo "
    • Indirizzo di residenza: ".get_post_meta($order_id, 'Indirizzo di residenza'.$i, true )."
    • "; } echo "
    "; } add_action( 'woocommerce_email_order_meta', 'add_email_custom_order_meta', 10, 3 );
    // display the extra data in the order admin panel
    function display_order_custom_data_in_admin_order_overview_page( $order ){  ?>
        

    get_items() as $item_id => $item ) { $quantity = $quantity + $item->get_quantity(); } $order_id = $order->get_order_number(); echo "
      "; $i = 0; for( $k=1; $k <= $quantity; $k++ ) { $i++; echo "
    • Nome e cognome: ".get_post_meta($order_id, 'Nome e cognome'.$i, true )."
    • "; echo "
    • Email: ".get_post_meta($order_id, 'Email'.$i, true )."
    • "; echo "
    • Numero di telefono: ".get_post_meta($order_id, 'Numero di telefono'.$i, true )."
    • "; echo "
    • Indirizzo di residenza: ".get_post_meta($order_id, 'Indirizzo di residenza'.$i, true )."
    • "; } echo "
    "; ?>

    bu işe yarıyor, miktara göre alanları ekliyor ama e-postadaki ve sipariş sayfasındaki verileri göremiyorum ve ayrıca ben özel bir kişiyim standart göster'i seçerseniz gibi bazı koşullar koymak istiyorum Aksi takdirde, ben bir şirketim'i seçerseniz, yalnızca bir kez doldurulacak bir grup alan ve seçilen miktar kadar doldurulacak daha fazla eşit alan grubu gösterecektir.

    kod eski belki woocomerce'in kancaları zamanla değişmiştir, bakmaya çalıştım ama çalıştıramadım. Bazı eklentilerde olduğu gibi bunu yapmanın daha kolay bir yolu olup olmadığını veya yukarıda belirtilen eklentilerden bazılarını ve kodu karıştırıp karıştıramayacağınızı biliyor musunuz?

    örneğin, eklentinin alanlarını ve koşullarını kullanmak, ancak miktara göre hangi alan grubunun gösterileceğini kodla seçmek?
    [1]: https://it.wordpress.org/plugins/woo-checkout-field-editor-pro/
    [2]: https://wasimsama.com/woocommerce-dynamic-custom-field-on-checkout-based-on-product-quantity-in-cart/

  • Bu konuyu yanıtlamak için giriş yapmış olmalısınız.