cari

Rumah  >  Soal Jawab  >  teks badan

WooCommerce Checkout - Sahkan peranan pengguna dan kandungan troli

Saya menghadapi cabaran dengan proses pembayaran dalam WooCommerce.

Saya menggunakan pemalam "B2B for WooCommerce" untuk membezakan antara produk biasa dan produk B2B. Adegan adalah seperti berikut:

1 - Pelawat tidak berdaftar menambahkan produk daripada kategori "Umum" (tersedia kepada pelawat tidak berdaftar secara lalai) ke troli beli-belah mereka.

2 - Pada halaman pembayaran, pelawat memutuskan untuk mendaftar sebagai pelanggan B2B (melalui medan pemilihan borang pada halaman pembayaran).

3 - Proses pendaftaran dan pembayaran berlaku serentak di halaman ini.

Saya ingin mengelakkan tempahan dibuat sekiranya pengguna mendaftar sebagai pelanggan B2B dan mempunyai produk "biasa" di dalam troli. Memandangkan kedua-dua tindakan ini (pendaftaran dan pembayaran) berlaku pada masa yang sama, cangkuk WooCommerce biasa tidak berfungsi seperti yang diharapkan.

Bagaimana untuk mengesahkan peranan pengguna dan kandungan troli beli-belah yang didaftarkan semasa proses pembayaran dan menyekat pesanan apabila syarat dipenuhi? Atau mungkin ada cara yang lebih baik dan lebih mudah untuk melakukan ini?

Saya mencuba fungsi menetapkan semula troli dan memuat semula halaman.

Editor:

Peranan pengguna: Wwp_wholesaler

Saya mencipta dua kategori produk WooCommerce: Umum dan Borong. "Normal" kelihatan kepada semua pelawat. Selepas mendaftarkan peranan, "Wwp_wholesaler" akan dapat melihat "pemborong".

Atribut nama medan pemilihan ialah: "afreg_select_user_role". Atribut nilai pilihan ialah "pelanggan" (untuk pelanggan tetap) dan "wwp_wholesaler" (untuk pemborong).

P粉545910687P粉545910687232 hari yang lalu748

membalas semua(1)saya akan balas

  • P粉014293738

    P粉0142937382024-04-04 00:01:07

    Kod berikut akan menghentikan proses pembayaran lebih awal apabila ia mengesan bahawa pelanggan B2B mempunyai item biasa dalam troli beli-belah mereka. Dalam kes ini, item biasa dikeluarkan dari troli dan mesej ralat dilemparkan, menghalang pesanan daripada dibuat.

    Nota: Alias ​​peranan pengguna yang diberikan adalah salah kerana alias peranan pengguna tidak menggunakan huruf besar.

    Kod:

    add_action( 'woocommerce_checkout_create_order', 'process_checkout_creating_order',  10, 2  );
    function process_checkout_creating_order( $order, $data ) {
        global $current_user;
    
        $targeted_field = 'afreg_select_user_role'; // Checkout field key to target
        $targeted_role  = 'wwp_wholesaler'; // User role slug (for B to B)
        $targeted_term  = 'Normal'; // Category term for Regular items
    
        // Targeting B to B user role only
        if( ( isset($data[$targeted_field]) && $data[$targeted_field] === $targeted_role ) 
        || in_array( $targeted_role, $current_user->roles ) ) {
            $cart = WC()->cart; //  Cart live object
            $item_keys_found = array(); // Initializing
    
            // Loop through cart items to search for "regular" items
            foreach ( $cart->get_cart() as $item_key => $item ) {
                if ( has_term( $targeted_term, 'product_cat', $item['product_id']) ) {
                    $item_keys_found[] = $item_key;
                }
            }
            // If regular items are found
            if ( count($item_keys_found) > 0 ) {
                // Loop through regular item keys (and remove each)
                foreach ( $item_keys_found as $item_key ) {
                    $cart->remove_cart_item( $item_key );
                }
                // Throw an error message, avoiding saving and processing the order
                throw new Exception( 
                    sprintf( __('You are not allowed to purchase "Regular" items.'.
                    ' %d "Regular" %s been removed from cart. %s', 'woocommerce'),
                        count($item_keys_found),
                        _n('item has', 'items have', count($item_keys_found), 'woocommerce'),
                        sprintf( '%s', get_permalink(wc_get_page_id('shop')), __('Continue shopping', 'woocommerce') )
                ) );
            }
        }
    }
    

    Kod ini terdapat dalam fail functions.php tema kanak-kanak (atau dalam pemalam). Diuji dan berfungsi.

    balas
    0
  • Batalbalas