Árazási példák: adóosztály, SKU, súly, ingyenes minta
Gyakorlati megoldások: másik adóosztály egy kiegészítőre, cikkszám és súly a kiegészítőknek, ingyenes minták közvetlen kosárba tétele.
Ezek a megoldások a Termékek mezőtípusra épülnek (Pro változat): a kiegészítőt önálló termékként hozod létre, így lehet saját ára, adóosztálya, cikkszáma, súlya és készlete.
Másik adóosztály egy kiegészítő opcióra
Szekció neve “Másik adóosztály egy kiegészítő opcióra”A mezők és opciók ára a fő termék adóosztályát követi. Ha egy kiegészítőre más adóosztály kell:
- Hozz létre egy új terméket a kiegészítő opcióhoz. Ha nem szeretnéd, hogy megjelenjen a bolt oldalain, rejtsd el (lásd lent a rejtett termékeket).
- Rendelj hozzá adóosztályt ehhez a termékhez.
- A fő terméken adj hozzá egy Termékek mezőt, és gyermekterméknek add meg az új kiegészítő-terméke(ke)t.
- A fő terméknek is add meg az adóosztályát.
Amikor a vásárló kiválaszt egy vagy több opciót, azok ára a fő termékétől eltérő adóosztályt kap.
Cikkszám (SKU) a kiegészítőknek
Szekció neve “Cikkszám (SKU) a kiegészítőknek”A kiegészítő opcióknak alapból nincs cikkszáma. Ha kell (például követnéd a készletüket), a legjobb megoldás a Termékek mezőtípus: a kiegészítőt önálló termékként hozod létre ár, súly, készlet és cikkszám megadásával, majd gyermekterméknek rendeled a fő termékhez. A mezőtípus beállításai a Termékek mező fejezetben vannak.
A gyermektermékek önálló vásárlásának tiltása
Szekció neve “A gyermektermékek önálló vásárlásának tiltása”Ha nem szeretnéd, hogy a gyermektermékeket a vevő külön is megvegye, állítsd a termék láthatóságát rejtettre. A bolt oldalain ekkor nem jelenik meg, de aki ismeri a webcímét, még elérheti. Hogy ez se menjen, kapcsold be a WooCommerce → Beállítások → Termékkiegészítők → Termékek oldalon a Rejtett termékek átirányítása beállítást.
Dinamikus cikkszám
Szekció neve “Dinamikus cikkszám”Ha a cikkszámot a választott opciók szerint szeretnéd alakítani (például betűt vagy számot fűznél a termék cikkszámához), ahhoz egyéni paramétert kell a mezőkhöz adni, kóddal.
Súly a kiegészítőknek
Szekció neve “Súly a kiegészítőknek”A szállítási díj számításához gyakran kell a kiegészítők súlya is. Három módszer van:
- Gyermektermékekkel (kód nélkül, Pro): a kiegészítőket önálló termékként hozod létre, saját súllyal és mérettel. Ha a vásárló kiválasztja őket, a súlyuk a kosárba kerül, és a szállítási díj helyesen számolódik. A gyermektermékeket elrejtheted a bolt többi részéből (Rejtett termékek átirányítása). Súly alapú szállítási bővítménnyel együtt a kiegészítők súlya hat a szállítási díjra.
- Számítás mezővel (Pro): a Számítás mező a felhasználói bevitelekből, árakból és más változókból értéket számol, ezzel a termék súlya is beállítható.
- Kóddal: rádiógomb- vagy kiválasztás mezők opcióihoz egy kódrészlettel súly-paramétert is adhatsz. Három részből áll: egy szám típusú mezőt ad az opciók beállításához, a választott opciók súlyát összegzi a kosár adataiban, és a kosárban kiírja a súlyt.
<?php/** * Súly-paraméter hozzáadása a mezők opcióihoz */function prefix_add_option_param( $option_count, $group_id, $item_key, $item, $key ) { $name = '_product_extra_groups_' . esc_attr( $group_id ) . '_' . esc_attr( $item_key ) . '[field_options][' . esc_attr( $option_count ) . ']'; $weight = isset( $item['field_options'][esc_attr( $key )]['weight'] ) ? $item['field_options'][esc_attr( $key )]['weight'] : ''; ?> <td class="pewc-option-extra"> <input type="number" class="pewc-field-option-weight" name="<?php echo $name; ?>[weight]" value="<?php echo esc_attr( $weight ); ?>" step="0.01"> </td> <?php}add_action( 'pewc_after_option_params', 'prefix_add_option_param', 10, 5 );
/** * A súly hozzáadása a kosártétel adataihoz */function prefix_end_add_cart_item_data( $cart_item_data, $item, $group_id, $field_id, $value ) { if ( ! empty( $item['field_options'] ) ) { $value_arr = ( strpos( $value, ' | ' ) !== false ) ? explode( ' | ', $value ) : array( $value ); foreach ( $value_arr as $value ) { foreach ( $item['field_options'] as $option ) { $option_len = strlen( $option['value'] ); if ( substr( $value, 0, $option_len ) == $option['value'] ) { $weight = isset( $cart_item_data['product_extras']['weight'] ) ? $cart_item_data['product_extras']['weight'] : 0; $weight += floatval( $option['weight'] ); $cart_item_data['product_extras']['weight'] = $weight; } } } } return $cart_item_data;}add_filter( 'pewc_filter_end_add_cart_item_data', 'prefix_end_add_cart_item_data', 10, 5 );
/** * A súly kiírása a kosárban */function prefix_get_item_data( $item_data, $cart_item ) { if ( ! empty( $cart_item['product_extras']['weight'] ) ) { $item_weight = $cart_item['product_extras']['weight']; $item_data[] = array( 'key' => __( 'Weight', 'woocommerce' ), 'value' => $item_weight, 'display' => $item_weight . ' ' . get_option( 'woocommerce_weight_unit' ), ); } return $item_data;}add_filter( 'woocommerce_get_item_data', 'prefix_get_item_data', 10, 2 );Ingyenes minták közvetlenül a kosárba
Szekció neve “Ingyenes minták közvetlenül a kosárba”A Termékek mezővel (Pro) elérheted, hogy a vásárló a termékoldalról ingyenes mintákat tegyen a kosarába anélkül, hogy bármi mást venne.
- Hozz létre egy terméket minden mintához. Például egy szövetmintánál kék, zöld és piros mintához három termék kell. Az áruk legyen 0, a kiemelt képük a minta képe. Ha nem akarod őket a bolt kínálatában, a Katalógus láthatósága legyen Rejtett. Betehetsz őket külön kategóriába is.
- Add a mintákat a fő termékhez. A fő terméken vegyél fel egy Termékek mezőt, és állítsd be: a Gyermektermékek a minta-termékek, a Termékek elrendezése Jelölőnégyzetes képek, a Termékmennyiségek Csak egy. Jegyezd meg a mező azonosítóját (a példában 4083).
- Add hozzá a kódrészletet a webhelyedhez (kódrészlet-kezelő bővítménnyel vagy a
functions.php-ban). A rész elején ademo_get_free_sample_field_ids()függvényben cseréld le a mezőazonosítókat a sajátodéra.
<?phpfunction demo_get_free_sample_field_ids() { return array( 123, 456, 789 ); // Írd át a saját mezőazonosítóidra}
// A minta-mezők kapnak egy saját CSS-osztálytfunction demo_child_product_wrapper_classes( $wrapper_classes, $child_product_id, $item ) { if ( in_array( $item['field_id'], demo_get_free_sample_field_ids() ) ) { $wrapper_classes[] = 'sample-wrapper'; } return $wrapper_classes;}add_filter( 'pewc_child_product_wrapper_classes', 'demo_child_product_wrapper_classes', 10, 3 );
// Hozzáadás és eltávolítás gomb a minták neve utánfunction demo_after_child_product_item( $name, $item, $available_stock, $child_product ) { if ( in_array( $item['field_id'], demo_get_free_sample_field_ids() ) ) { $add = sprintf( '<p><a href="#" class="button alt pewc-add-button">%s</a><a href="#" class="button pewc-add-button pewc-added">%s</a></p>', __( 'Add', 'pewc' ), __( 'Remove', 'pewc' ) ); return $name . $add; } return $name;}add_filter( 'pewc_child_product_name', 'demo_after_child_product_item', 10, 4 );
// AJAX: a minta közvetlen kosárba tételefunction pewc_ajax_add_child_product_to_cart() { $result = WC()->cart->add_to_cart( intval( $_POST['product_id'] ), intval( $_POST['quantity'] ) ); $result ? wp_send_json_success() : wp_send_json_error();}add_action( 'wp_ajax_pewc_add_child_product_to_cart', 'pewc_ajax_add_child_product_to_cart' );add_action( 'wp_ajax_nopriv_pewc_add_child_product_to_cart', 'pewc_ajax_add_child_product_to_cart' );A minták ettől még nem kerülnek kosárba: a gomb kattintását egy kis JavaScript is kezeli, amely az AJAX-hívást elküldi a kiválasztott minta azonosítójával és mennyiségével. A lábléc scriptjében ezt a hívást kell megvalósítani:
jQuery( '.child-product-wrapper .pewc-add-button:not(.pewc-added)' ).on( 'click', function ( e ) { e.preventDefault(); var $gomb = jQuery( this ); var $minta = $gomb.closest( '.pewc-checkbox-image-wrapper' ); var mennyiseg = $minta.find( '.pewc-quantity-wrapper input' ).val() || 1; var termekId = $minta.find( '.pewc-checkbox-form-field' ).val(); $gomb.css( 'pointer-events', 'none' ); jQuery.ajax( { url: pewc_vars.ajaxurl, type: 'POST', data: { action: 'pewc_add_child_product_to_cart', product_id: termekId, quantity: mennyiseg }, success: function ( valasz ) { if ( valasz.success ) { $gomb.text( 'A kosárba került' ); jQuery( 'body' ).trigger( 'wc_fragment_refresh' ); } else { $gomb.css( 'pointer-events', 'auto' ); } } } );} );A minta-mezők kinézetét (például az ár elrejtését és a keret nélküli megjelenítést) a .sample-wrapper osztályra írt saját CSS-sel igazíthatod.
Készült: