WooCommerce Koristni Snippeti
 
emaG 12. apr 2017 17:36:33 Pridružen od:
6. maj 2015
138 objav
102 25 0
#1

Pozdravljeni,



Kot sem že omenila pred kratkim delamo na selitvi trgovine z preste na woocommerce.

Gleda na to, da je po defaultu WooCommerce kar oskubljen kar se funkcionalnosti tiče in so vsi plugini kar dragi (tisti malo bolj koristni), sploh glede na to, da je treba za vsako figo kupit plugin al pa kodo spreminjat/dodajat, sem se odločila, da odprem to temo kjer bi delili kakšen uporaben snippet, torej kodo s katero bi dodali ali razdelali določene funkcije, ki jih po defaultu pogrešamo.



Sama sem prosila fanta, da deli kakšen snippet in za začetek imam priravljenih nekaj malenkosti...



Naj prvo povem za tiste, ki ne vedo kam to dodajati, da morajo iti v theme editor, tam poiščejo functions.php in čisto na koncu tega fajla vpisujejo te kode.



#1. V adminu, na seznamu izdelkov sem zelo pogrešala število artiklov, ki so na zalogi, saj po defaultu piše samo "in stock" ali "out of stock", nič pa ne vemo koliko jih je dokler izdelka ne odpremo.



takole izgleda po defaultu:

http://imgur.com/a/677pC



in takole po dodani kodi:

http://imgur.com/a/OluZ5



Koda:




//pokaži količino zaloge v admin products list

addfilter( 'woocommerceadminstockhtml', 'tmtshowvariationstocklevel', 10, 2 );



function tmtshowvariationstocklevel( $stockhtml, $theproduct ) {


if( sizeof( $the_product->get_children() ) ) {

$stock_html .= ' (' . $the_product->get_total_stock() . ')';

}

return $stock_html;

}




#2. Ko nekdo prekliče naročilo ali pa ga vrne in podobno se v woocommercu zaloga ne povrne avtomatsko nazaj ampak moraš to ročno storiti sam...

Da bi naredili avtomatski RESTOCK uporabimo naslednjo funkcijo/kodo:




//Auto restock function

if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly

if ( ! classexists( 'WCAutoStockRestore' ) ) {

class WCAutoStockRestore {

public function _
construct() {

addaction( 'woocommerceorderstatusprocessingtocancelled', array( $this, 'restoreorderstock' ), 10, 1 );

addaction( 'woocommerceorderstatuscompletedtocancelled', array( $this, 'restoreorderstock' ), 10, 1 );

addaction( 'woocommerceorderstatuson-holdtocancelled', array( $this, 'restoreorderstock' ), 10, 1 );

addaction( 'woocommerceorderstatusprocessingtorefunded', array( $this, 'restoreorderstock' ), 10, 1 );

addaction( 'woocommerceorderstatuscompletedtorefunded', array( $this, 'restoreorderstock' ), 10, 1 );

addaction( 'woocommerceorderstatuson-holdtorefunded', array( $this, 'restoreorderstock' ), 10, 1 );

} // End _construct()

public function restore
orderstock( $orderid ) {

$order = new WCOrder( $orderid );

if ( ! getoption('woocommercemanagestock') == 'yes' && ! sizeof( $order->getitems() ) > 0 ) {

return;

}

foreach ( $order->getitems() as $item ) {

if ( $item['product
id'] > 0 ) {

$product = $order->getproductfromitem( $item );

if ( $product && $product->exists() && $product->managingstock() ) {

$oldstock = $product->stock;

$qty = applyfilters( 'woocommerceorderitemquantity', $item['qty'], $this, $item );

$newquantity = $product->increasestock( $qty );

do
action( 'woocommerceautostockrestored', $product, $item );

$order->addordernote( sprintf( _( 'Item #%s stock incremented from %s to %s.', 'woocommerce' ), $item['productid'], $oldstock, $newquantity) );

$order->sendstocknotifications( $product, $newquantity, $item['qty'] );

}

}

}

} // End restoreorderstock()

}

$GLOBALS['wcautostockrestore'] = new WCAutoStockRestore();

}




Takole, to sta prvi dve za pokušino... več pa še pride. :)



Upam, da se najde kdo, ki mu bo to koristilo.


všeč(17) ni všeč(0) spam(0)
 
perunpro 12. apr 2017 23:06:33 Pridružen od:
23. maj 2008
3360 objav
2892 217 19
#2

Opcija, da skrijes dolocene fielde v kosarici - link na GitHub, tukaj je sicer se dodan (dobrodosel) pogoj ko gre za virtualne produkte, ko ne rabis shippmenta/podjetja in ostalih fieldov.


všeč(3) ni všeč(0) spam(0)
 
emaG 13. apr 2017 05:41:09 Pridružen od:
6. maj 2015
138 objav
102 25 0
#3

perunpro:

Opcija, da skrijes dolocene fielde v kosarici - link na GitHub, tukaj je sicer se dodan (dobrodosel) pogoj ko gre za virtualne produkte, ko ne rabis shippmenta/podjetja in ostalih fieldov.




sam tukaj je ena napaka na tej povezavi, ker je vse napisano za billing, v resnici bi mogl bit tud shipping umes...



takole bi mogla zgledat koda (s tem, da tukaj nimam vpisanih vseh opcij, samo za vzorc)


// odstrani polja v košarici oziroma na blagajni
add_filter( 'woocommerce_checkout_fields' , 'custom_override_checkout_fields' );

function custom_override_checkout_fields( $fields ) {
unset($fields['billing']['billing_company']);
unset($fields['billing']['billing_address_2']);
unset($fields['billing']['billing_country']);
unset($fields['shipping']['shipping_company']);
unset($fields['shipping']['shipping_address_2']);
unset($fields['shipping']['shipping_country']);
return $fields;
}

Ker imamo posebej billing in shipping option je treba to posebej definirat in ne vse enako kot tam na zgornji povezavi.


všeč(2) ni všeč(0) spam(0)
 
emaG 15. apr 2017 05:42:16 Pridružen od:
6. maj 2015
138 objav
102 25 0
#4

Evo še nekaj malenkosti, ki mogoče komu prav pridejo...



Sej veste tisto nerodno reč, ki jo imate na CHECKOUT strani, ko je po defoltu viden vnos podatkov za billing in za shipping (če se razlikuje od bilinga) in potem lahko daš kljukico stran, da se skrije ta del za shipping podatke...



No tale linija kode vam bo samodejno odstranila to kljukico in potem bodo stranke morale dodati kljukico samo takrat kadar se bosta naslova dejansko razlikovala.


// Uncheck "Ship to different address" checkbox
add_filter( 'woocommerce_ship_to_different_address_checked', '__return_false' );

Naslednja linija je za tiste, ki imajo omogočen tudi nakup kot gost brez registracije... na checkout page imate checkbox, ki ga lahko označite v kolikor želite ob nakupu tudi račun ustvariti z uporabljenimi podatki...



Ta koda avomatsko doda kljukico in potem mora stranka v kolikor ne želi ustvariti računa ob nakupu odstraniti kljukico.


// Auto check "create account" checkbox
add_filter('woocommerce_create_account_default_checked' , function ($checked){
return true;
});

upam, da ne zvenim tako zmedeno, kot se meni zdi zdaj, ko to preberem :)


všeč(6) ni všeč(0) spam(0)
 
wssrpnc 15. apr 2017 18:42:27 Pridružen od:
22. feb 2011
1022 objav
762 169 20
#5

jaz npr. nikakor ne najdem delujoce resitve, kako na product page umestiti 2 add to cart buttna. ce c/p originalni snippet mi potem vedno poscrolla nazaj do prvega, probal sem pa tud z nekim shortcode, ki sicer lepo podvoji title in add to cart, vendar ne deluje.. rad bi imel en cta v glavi in enega na koncu product page vsebine. ve kdo, kako se to naredi?



sicer pa top tema, koristni hacki, hvala.


všeč(2) ni všeč(0) spam(0)
 
emaG 23. apr 2017 12:30:51 Pridružen od:
6. maj 2015
138 objav
102 25 0
#6

wssrpnc:

jaz npr. nikakor ne najdem delujoce resitve, kako na product page umestiti 2 add to cart buttna. ce c/p originalni snippet mi potem vedno poscrolla nazaj do prvega, probal sem pa tud z nekim shortcode, ki sicer lepo podvoji title in add to cart, vendar ne deluje.. rad bi imel en cta v glavi in enega na koncu product page vsebine. ve kdo, kako se to naredi?



sicer pa top tema, koristni hacki, hvala.




2 gumba maš lahko, to ni problem z uporabo query urlja, vendar je potem dodatna težava drugje... težava se pojavi pri tem, da ta query ostane in potem pri vsaki ovežitvi strani število izdelka v košarici raste... edini način kako to preprečiti je, da naštimaš možnost dodajanja samoe enega enakega izdelka, kar pride prav mogoče pri kakih download trgovincah, pri fizičnih stvareh pa nikakor, saj želiš, da lahko stranke dodajo več komadov enakega izdelka


všeč(0) ni všeč(0) spam(0)
 
emaG 28. apr 2017 15:58:55 Pridružen od:
6. maj 2015
138 objav
102 25 0
#7

Evo nekaj za vse tiste, ki jih mogoče moti merilec moči gelsa na registracijski strani... z naslednjim snippetom ga odstranite :)


//REMOVE PASSWORD STRENGHT REQUIREMENT
function wc_ninja_remove_password_strength() {
if ( wp_script_is( 'wc-password-strength-meter', 'enqueued' ) ) {
wp_dequeue_script( 'wc-password-strength-meter' );
}
}
add_action( 'wp_print_scripts', 'wc_ninja_remove_password_strength', 100 );
všeč(0) ni všeč(0) spam(0)
 
Luka93 30. apr 2017 11:13:51 Pridružen od:
1. avg 2012
132 objav
86 39 1
#8

Avtomatsko osveževanje košarice (ko spremeniš količino, se cena avtomatsko posodobi). Samo še v css skriješ gumb in je košarica malo bolj clean.


add_action( 'wp_footer', 'cart_update_qty_script' );
function cart_update_qty_script() {
if (is_cart()) :
?>
<script>
jQuery('div.woocommerce').on('change', '.qty', function(){
jQuery("[name='update_cart']").removeAttr('disabled');
jQuery("[name='update_cart']").trigger("click");
});
</script>
<?php
endif;
}
všeč(0) ni všeč(0) spam(0)
 
Luka93 30. apr 2017 12:39:23 Pridružen od:
1. avg 2012
132 objav
86 39 1
#9

Spodnji snippet avtomatsko nastavi poštnino na "brezplačno", ko ima kupec v košarici dovolj velik znesek in skrije preostale poštnine.


/* Free Shipping Code start here */
function my_hide_shipping_when_free_is_available( $rates ) {
$free = array();
foreach ( $rates as $rate_id => $rate ) {
if ( 'free_shipping' === $rate->method_id ) {
$free[ $rate_id ] = $rate;
break;
}
}
return ! empty( $free ) ? $free : $rates;
}
add_filter( 'woocommerce_package_rates', 'my_hide_shipping_when_free_is_available', 100 );
všeč(0) ni všeč(0) spam(0)
 
emaG 30. apr 2017 13:00:58 Pridružen od:
6. maj 2015
138 objav
102 25 0
#10

@Luka93 - slaba stvar te kode, ki si jo napisal je da je končna, mislim ne daje ti nobenih opcij...



Sama imam nastavljeno tako, da recimo kljub temu, da je kupec upravičen do brezplačne dostave ima na voljo tudi osebni prevzem.



Seveda, če tega ne rabiš nobenih dodatnih opcij je itak vseeno. :)


všeč(0) ni všeč(0) spam(0)
 
 

🔒 Za odgovor na to temo se moraš prijaviti.

Prijavi se