WooCommerce Koristni Snippeti

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.

15 odgovorov

Z osebnim prevzemom:

/**
* @snippet Hide one shipping option in one zone when Free Shipping is available
* @how-to Watch tutorial @ https://businessbloomer.com/?p=19055
* @sourcecode https://businessbloomer.com/?p=260
* @author Rodolfo Melogli
* @compatible WooCommerce 2.6.1
*/

addfilter( 'woocommercepackagerates', 'bbloomerunsetshippingwhenfreeisavailablein_zone', 10, 2 );

function bbloomerunsetshippingwhenfreeisavailableinzone( $rates, $package ) {

// Only unset rates if free_shipping is available
if ( isset( $rates['free_shipping:7'] ) ) {
unset( $rates['flat_rate:1'] );

}

return $rates;

}

/**
END OF HIDE SHIPPING
*/

PAYPAL HRK SUPPORT

/*PAYPAL HRK ENABLE */

/Step 1 Code to use HRK currency to display Dirhams in WooCommerce:/

addfilter( 'woocommercecurrencies', 'addhrkcurrency' );

function addhrkcurrency( $currencies ) {
$currencies['HRK'] = __( 'Croatian Kuna', 'woocommerce' );
return $currencies;
}

/Step 2 Code to add HRK currency symbol in WooCommerce:/

addfilter('woocommercecurrencysymbol', 'addhrkcurrencysymbol', 10, 2);

function addhrkcurrencysymbol( $currencysymbol, $currency ) {
switch( $currency ) {
case 'HRK': $currencysymbol = 'HRK'; break;
}
return $currency
symbol;
}

addfilter( 'woocommercepaypalsupportedcurrencies', 'addhrkpaypalvalidcurrency' );
function addhrkpaypalvalidcurrency( $currencies ) {
array_push ( $currencies , 'HRK' );
return $currencies;
}

/*Step 3 – Code to change 'AED' currency to ‘USD’ before checking out with Paypal through WooCommerce: */

addfilter('woocommercepaypalargs', 'converthrktoeur', 11 );
function getcurrency($fromCurrency='EUR', $toCurrency='HRK') {
$url = "http://www.google.com/finance/converter?a=1&from=$from
Currency&to=$toCurrency";
$ch = curl
init();
$timeout = 0;
curlsetopt ($ch, CURLOPTURL, $url);
curlsetopt ($ch, CURLOPTRETURNTRANSFER, 1);
curlsetopt ($ch, CURLOPTUSERAGENT,
"Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1)");
curlsetopt ($ch, CURLOPTCONNECTTIMEOUT, $timeout);
$rawdata = curlexec($ch);
curl
close($ch);
$data = explode('bld>', $rawdata);
$data = explode($toCurrency, $data[1]);
return round($data[0], 2);
}
function convert
hrktoeur($paypalargs){
if ( $paypal
args['currencycode'] == 'HRK'){
$convert
rate = getcurrency(); //Set converting rate
$paypal
args['currencycode'] = 'EUR'; //change AED to USD
$i = 1;
while (isset($paypal
args['amount' . $i])) {
$paypal
args['amount' . $i] = round( $paypalargs['amount' . $i] / $convertrate, 2);
++$i;
}
if ( $paypalargs['shipping1'] > 0 ) {
$paypalargs['shipping1'] = round( $paypalargs['shipping1'] / $convertrate, 2);
}
if ( $paypal
args['discountamountcart'] > 0 ) {
$paypalargs['discountamountcart'] = round( $paypalargs['discountamountcart'] / $convertrate, 2);
}
if ( $paypal
args['taxcart'] > 0 ) {
$paypal
args['taxcart'] = round( $paypalargs['taxcart'] / $convertrate, 2);
}

}

return $paypal_args;
}
/* END OF HRK PAYPAL ENABLE */

skripte so iz neta, niso moje maslo. Pri prvi je treba dodat IDje šipingov.

Če je ta tema namenjena tudi requestom za kakšen useful snippet, se priporočam za sledečo rešitev (ker Google rešitve ne pozna, ali pa jaz ne znam pravilno zastaviti vprašanja.... :) )

Kako WooCommerce pripraviti do tega, da bi uporabniku, v kolikor bi na Checkout strani vpisal ime podjetja v "Company Name" polje, pokazalo samo en način plačila npr. "Direct Bank Transfer", vsem ostalim (ki pa tega Company Name polja ne bi izpolnili) pa samo drug način plačila, npr. "Cash on Delivery" ?

Je to sploh izvedljivo?

Mene tudi zanima ali obstaja možnost, da nekje na landing pagu prikazujem od produkta možnosti: se pravi gumb dodaj v košarico, količina, barva, cena? pa da lahko izbiram za kateri produkt to prikazovati. Našel sem, da lahko celotni produkt prikžem ampak je z sliko in vsemi ostalimi zadevami. je to možno?

msarc1:
Mene tudi zanima ali obstaja možnost, da nekje na landing pagu prikazujem od produkta možnosti: se pravi gumb dodaj v košarico, količina, barva, cena? pa da lahko izbiram za kateri produkt to prikazovati. Našel sem, da lahko celotni produkt prikžem ampak je z sliko in vsemi ostalimi zadevami. je to možno?

Ja, če imaš že opcijo, da potegneš celoten produkt, pol je vse že rešeno... ena od opcij, da odstraniš sliko je enostavno z CSS display: none;

Exhumator:
Če je ta tema namenjena tudi requestom za kakšen useful snippet, se priporočam za sledečo rešitev (ker Google rešitve ne pozna, ali pa jaz ne znam pravilno zastaviti vprašanja.... :) )

Kako WooCommerce pripraviti do tega, da bi uporabniku, v kolikor bi na Checkout strani vpisal ime podjetja v "Company Name" polje, pokazalo samo en način plačila npr. "Direct Bank Transfer", vsem ostalim (ki pa tega Company Name polja ne bi izpolnili) pa samo drug način plačila, npr. "Cash on Delivery" ?

Je to sploh izvedljivo?

si probal if (isset(bla bla)) ali nekaj v tem smislu?

mislim, mal bi blo treba probat kaj točno bi delovalo, ampak sem prepričana, da je možno