logo vandaal 88x50 1

Někdy může být nežádoucí, aby se u variabilních produktů zobrazovala cen například "5.000 - 10.000", dokud si zákazník nevybere nějakou variantu s konkrétní cenou.

Chcete-li tedy zobrazovat cenu estetičtěji, můžete využít snippet níže, který vložíte do souboru functions.php své šablony. Díky němu se zobrazí cena ve tvaru "Od: 5.000".

SNIPPET CENA STARE SNIPPET CENA OD NOVE

Pro některé zákazníky je těžké pochopit, že jako variabilní symbol při platbě bankovním převodem mají použít číslo objednávky, a to i přesto, že na děkovné stránce či emailu jim to jasně WooCommerce napíše. Tak si trošku pomůžeme a přidáme jasné označení Variabilní symbol jak na děkovnou stránku, tak do emailu, snippetem vloženým do functions.php.

Pokud chcete z nějakého důvodu zrušit otravný výpočet dopravy v košíku, stačí použít tento snipet, který vložíte do functions.php své šablony.

 

Chcete informovat zákazníka o tom, za kolik má ještě nakoupit, aby měl dopravu zdarma? Tento snippet zobrazí hlášení, za kolik má ještě zákazník nakoupit, aby měl dopravu zdarma. Jen upozorním, že tento jednoduchý snippet není vhodný pro více dopravních zón či měn. Na to už doporučuji použít regulérní placené pluginy.

 

Nabízíte dopravu zdarma od určité částky, třeba od výše objednávky v hodnotě 1.000 Kč? A co tak u produktů, které jsou dražší než uvedená částka zobrazit štítek "Doprava zdarma"?

Stačí na to malý snippet vložený do functions.php vaší šablony. Text se vloží jak na výpis produktů, tak do samotného produktu. Pozici si můžete upravit sami.

Často se v diskuzích objevuje dotaz, jak upravit data z XML/CSV zdroje při importu do WooCommerce pomocí pluginu WP All Import. Protože na import nepoužívám nic jiného, tak vám prozradím nějaké triky, které se dají pomocí funkcí udělat. Nezapomeňte, že kódy, které jsou zde uvedené, nemusí a pravděpodobně nebudou korespondovat s vašimi poli z XML/CSV, takže je musíte upravit. Podstatné je pro vás zabalení do funkce [NazevFunkce({VASEPOLEZXML})]. Některé funkce nejsou mým výtvorem, přesto se o ně s vámi podělím, protože se na ně často dotazujete.
Funkce vkládáte do poslední části layoutu importu s názvem Function Editor.

Krátký popis

Jako první si zkracuji dlouhý popis tak, abych jej mohl použít jako krátký popis:

// vytváříme si krátký popis z dlouhého popisu
function KratkyText($text) {
// počet znaků v kr.textu
$length = 190; 
// čím končí krátký popis
$ending = "</strong> ...
// po zakončení můžeme přidat odkaz na dlouhý popis (odkaz href musí směrovat na název tabu, může se lišit v šablonách)
<a href=\"#tab-description\" title=\"Více informací o produktu\"><strong>Více informací</strong></a>"; 
// ořízne řetězec na zadaný počet znaků
$text = mb_substr($text, 0, $length);
// poslední výskyt mezery
$pos = mb_strrpos($text, " ");
// oříznutí řetězce
$text = mb_substr($text, 0, $pos);
// dodání koncovky
$text .= $ending;
return $text;
}

a do pole Krátký popis vložím kód: [KratkyText({DESCRIPTION[1]})]

Záměna textu

Občas je potřeba změnit texty, příkladem může být například anglické označení barev variant, které potřebuji přeložit do češtiny. Opět velmi jednoduché:

//přepisujeme názvy variant
function PrepisVariant($retezec){
$retezec = str_replace("red","červená",$retezec);
$retezec = str_replace("green","zelená",$retezec);
$retezec = str_replace("yellow","žlutá",$retezec);
return $retezec;
}

a vkládám pomocí kódu: [PrepisVariant({VARIANTY[1]/VARIANTA[1]})]

Přepočet ceny

Pokud potřebujete přepočítat cenu produktu, zpravidla ji potřebujete zvýšit o svou marži, použijte následnou funkci:

//upravujeme prodejní cenu
function UpravCenu($cena)
{
$novacena = $cena * 1;
$novacena = ceil($novacena);
return $novacena;
}

a klidně si upravte cenu ve slevě:

//upravujeme cenu ve slevě
function UpravCenuSleva($cenas)
{
$novacenas = $cenas * 1.31;
$novacenas = ceil($novacenas);
return $novacenas;
}

a do pole Cena vložíme kód (pro cenu ve slevě upravíme název funkce viz výše): [UpravCenu({CENA[1]})]

Změna váhy

Pokud používáte pro váhu kilogramy, ale dodavatel používá gramy, můžete na převod váhy použít předchozí funkci. Upravíme si ji na váhu:

// přepočet váhy z gramů na kilogramy
function PrepocetVahy($vaha)
{
$novavaha = $vaha * 0.001; 
return $novavaha;
}

a do pole Váha vložíme: [PrepocetVahy({VAHA[1]})]

Sklad a jeho řízení

Pokud váš dodavatel nemá ve feedu uvedené, zda je produkt skladem, a vy přesto chcete řídit sklad, můžete si pomoci sami. Teda pokud ve feedu je alespoň počet kusů skladem. Používat k tomu budeme Set with XPath:

// řídíme sklad ano-ne podle počtu kusů
// pokud je počet kusů nula, není potřeba řídit sklad
function RiditSklad($rizeniskladu){
    if($rizeniskladu === '0') {
        $rizeniskladu = "no";
    } else {
        $rizeniskladu = "yes";
    }
return $rizeniskladu;
}

a jako XPath dáme: [RiditSklad({POCETKUSU[1]})]

// nastavujeme zda je produkt skladem či nikoliv
// když je počet kusů nula, označí se jako Vyprodáno
function JeSkladem($naskladu){
    if($naskladu === '0') {
        $naskladu = "outofstock";
    } else {
        $naskladu = "instock";
    }
return $naskladu;
}

a jako XPath dáme: [JeSkladem({POCETKUSU[1]})]

// pokud je počet kusů nula, můžete nastavit, jestli i přesto smí zákazník objednat
function MuzeObjednat($lzeobjednat){
    if($lzeobjednat === '0') {
        $lzeobjednat = "no";
    } else {
        $lzeobjednat = "no";
    }
return $lzeobjednat;
}

a jako XPath dáme: [MuzeObjednat({POCETKUSU[1]})]

Zvýraznění produktů

Používám malý trik na zvýrazněné produkty. Nastavuji takto produkty, které jsou skladem v nějakém minimálním počtu (v příkladu je to minimálně pět kusů skladem). Bude-li počet kusů nižší než přednastavený, nezvýrazní se:

function Doporucene($featured){
if($featured >= 5) {
  $featured = "yes";
} else {
  $featured = "no";
}
return $featured;
}

a jako XPath dáme: [Doporucene({POCETKUSU[1]})]

Máte produkty, u kterých chcete omezit způsob platby? Například prodáváte matrace a nabízíte i matrace na míru, ale právě u těchto vyžadujete platbu předem? Pak by se vám mohl hodit tento snippet, který stačí vložit do functions.php vašeho designu. V mém případě jsem chtěl, aby pokud je v košíku produkt z kategorie 121 byla možnost platit pouze předem, bez ohledu na jiné produkty v košíku. Pokud by se v košíku nenacházel produkt z kategorie 121, lze použít všechny aktivní platby:

Znáte to, zákazník si objedná na dobírku, zásilku nepřevezme, Vám se zásilka vrátí a peníze za odeslání jsou fuč.

Nabízí se jedno řešení. Dovolit platbu na dobírku pouze určitým zákazníkům. Ukážeme si, jak umožnit dobírku pouze uživatelům, kteří uskutečnili alespoň jeden úspěšný nákup s platbou předem. Znamená to tedy, že pokud u Vás nakupuje někdo poprvé, bude mít k dispozici pouze platbu předem bankovním převodem, až ji uhradí a vy ji nastavíte jako dokončenou, tak bude automaticky přesunut do skupiny uživatelů member, a této skupině již dovolíme zobrazení možnosti platby na dobírku.

Jak vyřešit první úkol, tedy automatický přesun uživatelů s dokončenou objednávkou do skupiny member, jsem psal v článku Automatická změna uživatelské role po prvním nákupu.

Pokud již tedy máme toto vyřešeno, přejdeme k druhému úkolu, a to, že povolíme dobírku pouze pro uživatele s rolí member. Provedeme to přidáním kousku kódu do functions.php Vašeho theme:

Nyní se dobírka bude zobrazovat uživatelům s rolí member, do které jsme je přesunuli pomocí automatické změny role po první úspěšné objednávce.

 

Od verze WooCommerce 3.5 se změnila struktura emailů, které se odesílají zákazníkům. Bohužel jsem narazil na chybu, pokud používáte Platbu hotově při doručení - Dobírku. Pak přijde zákazníkovi po vytvoření objednávky takovýto paskvil:

Jak z této šlamastiky ven? Já to vyřešil takto:

Vzal jsem šablonu emailu customer-processing-order.php z Woo verze 3.4.7 a nakopíroval ji do svého theme do složky
wp-content/themes/moje-theme/woocommerce/emails

Protože však zmizel z překladu text, že Vaše objednávka byla přijata, musel jsem si pomoct vlastním překladem,který jsem vložil do functions.php svého theme:

add_filter('gettext', 'translate_vandaal');
add_filter('ngettext', 'translate_vandaal');
function translate_vandaal($translated) {
$translated = str_ireplace('Your order has been received and is now being processed. Your order details are shown below for your reference:', 'Vaše objednávka byla přijata a nyní je v procesu vyřizování. Detaily Vaší objednávky jsou zobrazeny níže pro Váš přehled:', $translated);
return $translated;
}

Dále jsem musel přepsat hlavičku emailu v nastavení Woocommerce->Nastavení->Emaily ve zprávě Zpracovávání objednávky, kde jsem přepsal předmět na Potvrzení Vaší objednávky z {order_date} na {site_title} a hlavičku emailu na Děkujeme Vám za Vaši objednávku.

A to je vše. Nyní již zákazníkovi, který objedná na dobírku, přijde správně formulovaný email. A Vám samozřejmě bude Woo hlásit, že máte zastaralou šablonu (verzi 2.5 oproti nové verzi 3.5), ale fungovat to bude, odzkoušeno.

Pokud nemáte zálohu daného souboru z verze Woo 3.4.7, tak zde je jeho obsah:


<?php
/**
* Customer processing order email
*
* This template can be overridden by copying it to yourtheme/woocommerce/emails/customer-processing-order.php.
*
* HOWEVER, on occasion WooCommerce will need to update template files and you
* (the theme developer) will need to copy the new files to your theme to
* maintain compatibility. We try to do this as little as possible, but it does
* happen. When this occurs the version of the template file will be bumped and
* the readme will list any important changes.
*
* @see https://docs.woocommerce.com/document/template-structure/
* @author WooThemes
* @package WooCommerce/Templates/Emails
* @version 2.5.0
*/

if ( ! defined( 'ABSPATH' ) ) {
exit;
}

/**
* @hooked WC_Emails::email_header() Output the email header
*/
do_action( 'woocommerce_email_header', $email_heading, $email ); ?>

<p><?php _e( "Your order has been received and is now being processed. Your order details are shown below for your reference:", 'woocommerce' ); ?></p>

<?php

/**
* @hooked WC_Emails::order_details() Shows the order details table.
* @hooked WC_Structured_Data::generate_order_data() Generates structured data.
* @hooked WC_Structured_Data::output_structured_data() Outputs structured data.
* @since 2.5.0
*/
do_action( 'woocommerce_email_order_details', $order, $sent_to_admin, $plain_text, $email );

/**
* @hooked WC_Emails::order_meta() Shows order meta data.
*/
do_action( 'woocommerce_email_order_meta', $order, $sent_to_admin, $plain_text, $email );

/**
* @hooked WC_Emails::customer_details() Shows customer details
* @hooked WC_Emails::email_address() Shows email address
*/
do_action( 'woocommerce_email_customer_details', $order, $sent_to_admin, $plain_text, $email );

/**
* @hooked WC_Emails::email_footer() Output the email footer
*/
do_action( 'woocommerce_email_footer', $email );

Potřebujete návštěvníkům stránek zobrazit jiný text než registrovaným a přihlášeným uživatelům? Stačí na to jednoduchý snippet, který vložíme do functions.php a získáte tím jednoduché shortcody.

Pak již stačí použít shortcode [UZIVATEL] text [/UZIVATEL] pro zobrazení textu jen přihlášeným uživatelům (v opačném případě se zobrazí text "Pro zobrazení se musíte přihlásit" - text si upravte dle potřeby), nebo [ HOST ] text [/HOST ] (musel jsem vložit mezery, aby se to tu zobrazilo, vy je smažte) pro zobrazení textu návštěvníkům, tedy nepřihlášeným uživatelům. Jak vidíte, klidně si můžete nastavit vlastní název shorcodu.

Hledáte správce svého webu?

Neváhejte mne kontaktovat a dohodnout spolupráci. Rád se postarám o váš web či shop, ať už jde o aktualizace systému, jeho úpravy či udržování aktuálního obsahu.
KONTAKT
linkedin facebook pinterest youtube rss twitter instagram facebook-blank rss-blank linkedin-blank pinterest youtube twitter instagram