ceske-sluzby icon indicating copy to clipboard operation
ceske-sluzby copied to clipboard

Nezobrazuje sa <DELIVERY_DATE/>

Open Kocarik opened this issue 8 years ago • 21 comments

Nezobrazuje sa DELIVERY_DATE v XML Feedu pre heureku, v XML Feedu je zobrazený len ukončovaci tag DELIVERY_DATE/>.

V nastaveniach XML Feed mam nastavenú hodnotu Dodacia doba na 3.

V **zakladnych nastveniach _mam _vypnuté toto : Aktivovat možnost podrobného nastavení dodací doby, které bude dostupné zde.

Použivam najnovšiu verziu stiahnutu s mastra, a pozivam najnovsiu verziu woocommerce aj wordpressu.

Kocarik avatar May 10 '16 20:05 Kocarik

@Kocarik: Díky za report, zkusil jsem stejné nastavení a ve feedu na adrese /?feed=heureka se mi zobrazuje DELIVERY_DATE s hodnotou 3. Jsou produkty skladem? Je možné web a feed někde vidět (případně napište)?

pavelevap avatar May 10 '16 22:05 pavelevap

@pavelevap Aha tak v pri niektorých sa to zobrazuje, ale konkretnejsie Heureka hlasi túto chybu:

chýba u 98% položiek (243/248) položka DELIVERY_DATE. Dajte používateľom informáciu o dostupnosti vášho tovaru, zvyšuje to konverziu.

Ale ak produkt nie je skladom tak by mal dať deliveri date na na nejaku hodnotu, a ono neda ziadnu hodnotu da len ukončovaci tag a tak hlasi potom chybu heureka

Kocarik avatar May 10 '16 23:05 Kocarik

Pokud produkt není vůbec skladem, tak se do feedu vůbec nedostane, což by mělo odpovídat pravidlům Heureky, která tam neprodejné produkty nechce. Pokud ale produkt není skladem, ale je možné si ho na webu objednat (zobrazuje se tam tlačítko pro přidání do košíku a možnost objednat), tak je uváděna prázdná hodnota. Ale koukám na manuál a vypadá to, že už to Heureka zase změnila a měla by tam být hodnota -1.

Problém je řešen ještě zde: #20.

Jak máte produkty přesně nastavené? Zobrazujete tam někde na webu informaci, že jsou k dodání do 3 dnů?

pavelevap avatar May 11 '16 07:05 pavelevap

@pavelevap @novetrendy Posielam obrazok v prílohe ako teda mam nastavene niektooré produkty , pri ktorých neukazuje ten deliveri date napr pri tomto produkte: <ITEM_ID>8112</ITEM_ID> <PRODUCTNAME>Lopta halový futbal MERCO INDOOR STAR v.5</PRODUCTNAME>

A tu je xml feed : https://www.tisha.sk/?feed=heureka a obrazok:

upravit produkt tisha wordpress

Kocarik avatar May 12 '16 20:05 Kocarik

@pavelevap Prosim tak ako teda dalej postupovať , resp. ako vyriešiť problém ?

Ďakujem

Kocarik avatar May 13 '16 18:05 Kocarik

@Kocarik: Na tento způsob nastavení zatím není plugin bohužel připraven. Jestli jsem to správně pochopil, tak máte označeno, že bude produkt k dodání za 5 - 10 dní (a zákazníci si ho mohou objednat), ale na druhou stranu je uveden skladem (s nulovým počtem kusů)? Jakým způsobem máte na webu uvedeno 5 - 10 dní? Používáte nějakou vlastní funkci nebo plugin?

Nastavení dodací doby v záložce XML feed se aplikuje pouze pro produkty, které jsou skladem, zatímco uvedený produkt není skladem (nulový počet kusů), takže je dodací doba obecně neznámá. Během několika dní ale bude doplněna možnost nastavení dodací doby u jednotlivých produktů + hromadné nastavení právě pro tyto případy (viz #20, zatím je rozpracovaná verze pod položkou "Aktivovat možnost podrobného nastavení dodací doby").

Jak to aktuálně vyřešit?

  • Označit produkty jako skladem, pak bude pro feed použito nastavení dodací doby ze záložky XML feed.
  • Počkat pár dní než bude dokončené nové nastavení.

pavelevap avatar May 13 '16 19:05 pavelevap

@Kocarik Než @pavelevap připraví nové nastavení, můžete použít můj plugin a do nastavení českých služeb u globální dodací doby zadejte delivery_date.

novetrendy avatar May 13 '16 20:05 novetrendy

@novetrendy: Díky, pořád mi ale vrtá hlavou, jak to celé ideálně udělat :-) Někdo totiž může mít všechny produkty označené jako skladem (je to minimum práce) a chce u nich mít hromadně nastavenou dodací dobu 2 dny (aneb než mu dorazí od distributora), což je nyní možné nastavit na záložce XML feed. Vlastně tak ale nejsou oficiálně skladem v eshopu, ale u distributora.

Ale někdo jiný zase produkty označuje, že sice nejsou skladem, ale jsou dostupné na objednávku (také třeba za dva dny), viz např. @Kocarik. V tomto případě by se asi také mohlo automaticky aplikovat nastavení dodací doby ze záložky XML feed, ale co když tam budou i nějaké produkty označené skladem? Pokud někdo používá obě situace najednou (skladem i na objednávku), tak budou vlastně potřeba 2 různé globální nastavení + možnost detailního nastavení přímo na úrovni jednotlivých produktů / variant? A nastavení dodací doby u produktu bude platit pouze pro produkty, když jsou označené skladem nebo pro produkty, které jsou na objednávku? Nevím, jestli to zbytečně nekomplikuji, ale začínám v tom mít trochu zmatek :-)

pavelevap avatar May 13 '16 20:05 pavelevap

@pavelevap Já bych to řešil tak:

  • [x] Je aktivovaný sklad -> ANO -> Je počet ks skladem => '1' -> ANO -> Je nastavená DD u produktu -> ANO -> Zobraz DD
  • [x] Je aktivovaný sklad -> ANO -> Je počet ks skladem => '1' -> ANO -> Je nastavená DD u produktu -> NE -> Zobraz globální DD
  • [x] Je aktivovaný sklad -> ANO -> Je počet ks skladem => '1' -> NE -> Je povolený nákup na OBJ -> ANO -> Je nastavená DD u produktu -> ANO -> Zobraz DD
  • [x] Je aktivovaný sklad -> ANO -> Je počet ks skladem => '1' -> NE -> Je povolený nákup na OBJ -> ANO -> Je nastavená DD u produktu -> NE -> Vyřaď z feedu // Zde je předpoklad pokud není nastavena DD na úrovni produktu, že shopmanager nechce produktu uvádět do feedu. Ale je zde i možnost, že bude globální DD nastavena třeba na 10 a všechny produkty na objednávku by v případě nenastavení DD na úrovni produktu brali globální DD 10. (Poznámka: Nebudeme zatím dělat další nastavení, ale vezmeme to automaticky. Pokud je globálně vše skladem, tak produkt označíme na objednávku s neznámou dostupností, pokud globálně není skladem, tak použijeme zadanou globální hodnotu.) Takže druhá možnost (k tomu by se mohl udělat globální option):
  • [x] Je aktivovaný sklad -> ANO -> Je počet ks skladem => '1' -> NE -> Je povolený nákup na OBJ -> ANO -> Je nastavená DD u produktu -> NE -> Zobraz globální DD
  • [x] Je aktivovaný sklad -> ANO -> Je počet ks skladem => '1' -> NE -> Je povolený nákup na OBJ -> NE -> Vyřaď z feedu (nebo DD -1) (Poznámka: -1 by to být nemělo, to by mělo jít objednat s neznámou dostupností)
  • [x] Je aktivovaný sklad -> NE -> Je nastavená DD u produktu -> ANO -> Zobraz DD
  • [x] Je aktivovaný sklad -> NE -> Je nastavená DD u produktu -> NE -> Zobraz globální DD

Doufám, že jsem nevynechal nějakou možnost.

A prosím mrkněte na #67 , <EXTRA_MESSAGE> bych fakt už potřeboval. Zatím jsem přepsal kousek pluginu české služby a funguje mi to, ale kdyby byla volba zobrazovat přes custom field, byla by to paráda.

$extra_message = get_post_meta( $product_id, 'nt_extra_message', true );
if (!empty($extra_message)){
            $xmlWriter->writeElement( 'EXTRA_MESSAGE', $extra_message);
}

@Kocarik Já to mám v pluginu nastavené tak, že pokud není DD nastavena, je automaticky 0, čili skladem.

novetrendy avatar May 14 '16 07:05 novetrendy

@pavelevap @novetrendy Dakujem Vam panove za riesenie, nastavil som to teda na 0 ze vsetko skladom.

Dufam ze coskoro vijde dalsi update aj s fixom :) este raz dik za podpru aj plugin

Kocarik avatar May 17 '16 10:05 Kocarik

@pavelevap @novetrendy Ako prosim niekde v kóde nastavým aspon na pevno dodaciu dobu pre všetky produkty na 3 dni ?

Ďakujem

Kocarik avatar May 22 '16 11:05 Kocarik

@Kocarik: Stačí místo nuly nastavit hodnotu 3 (v záložce XML feed).?

pavelevap avatar May 23 '16 12:05 pavelevap

@pavelevap Nastavil som tam hodnotu 3 a nefunguje, vsade mi da len ukoncovaci tag </Deliveri_Date>

Kocarik avatar May 23 '16 12:05 Kocarik

A máte produkty označené skladem? Nebyl by nějaký odkaz (klidně soukromě)?

pavelevap avatar May 23 '16 12:05 pavelevap

Tak toto bylo trochu peklo :-) Pokud máte ještě někdo zájem, tak můžete začít testovat, stáhněte si aktuální verzi ze speciální branche: https://github.com/pavelevap/ceske-sluzby/archive/74-dodaci-doba.zip

Pokusil jsem se (úspěšně) projít všechny možné scénáře (zaškrtal jsem si je výše, díky @novetrendy), takže jen čekám až někdo narazí na nějakou chybu nebo novou možnost :-) Ještě budu muset asi některé funkce trochu přepsat (a asi už budeme potřebovat unit testy), ale funkčnost by se moc měnit neměla.

Napadly mě ještě následující věci, které by možná chtělo implementovat/prodiskutovat:

  • [x] Zatím přepisuji přímo hodnoty "Skladem", a to pomocí filtru woocommerce_get_availability_text. Možná by to někdo chtěl nepřepisovat, ale pouze doplnit jako další informaci, např. pomocí akce woocommerce_single_product_summary? Potom by ale docházelo zobrazení typu "Skladem" a pod tím "Dodací doba 3 dny". Podle mě je lepší tam mít třeba jen "Skladem do 3 dnů"?
  • [x] Obecně se dostupnost zobrazuje až u konkrétního produktu, možná bychom tam měli mít možnost pro zobrazení v různých výpisech (eshop, kategorie)?
  • [x] Zatím jsem tam měl možnost vypnout zobrazování dodací doby na webu (a použít ji pouze pro feed), ale asi je to nesmysl? Heureka určitě kontroluje co je ve feedu a co na webu? Jaké s tím máte zkušenosti? Je to potřeba nebo mohu zrušit? Nakonec nebudeme rušit, celé nastavení bylo trochu překopáno, ale pokud to někdo nechce zobrazovat na webu, tak i to bude možné.
  • [x] Zatím není nastavení funkční pro jednotlivé varianty a používá se globální doba. Asi by měly alespoň dědit případné nastavení produktu?
  • [ ] Co se stane ve chvíli, když někdo změní nastavení hodnot pro dodací dobu, ale u produktů budou jiné hodnoty? Mám zakázat změnu nastavení pokud to nějaký produkt obsahuje? Nebo to řešit na straně selectu pro dodací dobu u produktu a tam upozornit a donutit ke změně. A nebo to ignorovat, používat pro feed, ale nezobrazovat na webu? Pokud někdo používá {VALUE} ve vlastním formátu a není nalezen příslušný text (tedy není hodnota nastavena), tak se nepoužije ani hodnota, což by asi měla?
  • [ ] Doplníme ještě možnost "Na dotaz" a/nebo "doba dodání neznámá", kam by šlo zadat odkaz na kontaktní stránku, případně použít email z administrace eshopu?
  • [x] Možnost napojení vlastního uživatelského pole zatím funguje pouze pro XML feed. Byl by zájem toto pole použít i pro administraci a zobrazení na webu (abyste případně nemuseli používat další plugin)?
  • [ ] Nastavení globální dodací doby máme (trochu nešťastně) na záložce "XML feed", ale co když někdo nechce vůbec používat XML, ale jen dodací dobu pro zobrazení na webu?
  • [x] K dodací době doplníme ještě možnost zadat datum předobjednávky a následně ho použijeme v XML feedu.
  • [ ] Umožnit nastavení i na úrovni kategorie nebo to nedává smysl?
  • [x] Pokud není zapnuto podrobné nastavení dodací doby, tak by nemělo nic z toho fungovat, i když je to uložené v databázi.
  • [ ] Pokud není zvolena žádná informace o dodací době pro feed, tak se mohou zobrazovat neplatné výsledky, asi by to chtělo pro jistotu ošetřit (ale co bude nastaveno defaultně)?

pavelevap avatar Aug 19 '16 21:08 pavelevap

Tak možnost nastavení a zobrazení předobjednávky už máme, ještě zbývá:

  • [x] Zobrazení nastavené hodnoty v XML feedu.
  • [ ] Produkt s předobjednávkou by měl mít nastaveno "skladem", aby po uplynutí data nebylo na webu "dodáme za 3 dny"? I když i to je asi možné? Je to asi spíše k diskuzi...
  • [x] Doplnit datepicker (JS) pro příjemnější zadávání data předobjednávky.
  • [ ] Google umožňuje zobrazovat i čas, kdy začíná prodej, ale asi je to zatím zbytečné.

Pokud někoho něco napadne, tak sem s tím :-)

pavelevap avatar Aug 31 '16 21:08 pavelevap

Tak hlavní funkce máme snad hotové (zkoušel někdo?), takže uděláme merge a pokračovat s drobnostmi budeme až v další verzi.

pavelevap avatar Sep 01 '16 12:09 pavelevap

Brzy bude doplněna podpora pro nastavení dodací doby i v rámci variant, zbývá dořešit:

  • [ ] Jak zobrazovat dodací dobu u variant? Pokud je to náhrada textu, tak je to bez problémů (po výběru varianty), ale zobrazení v archivech (či u produktu bez vybrané varianty) je složitější. Pokud má každá varianta jinou dodací dobu, tak zobrazíme tu nejkratší? Nebo raději žádnou?
  • [ ] Umožníme hromadné nastavení dodací doby na úrovni produktu pro všechny varianty? Asi nebude problém u variant dědit nastavení produktu, ale budeme tuto informaci zobrazovat (viz bod výše)?
  • [ ] Pozor, WooCommerce 2.4 a starší má jiný způsob pro zobrazení možností nastavení u variant v administraci. Buď to bude potřeba omezit verzí nebo doplnit podporu i pro starší verze (zatím oficiálně podporujeme i WooCommerce 2.2.x). Nezdá se to, ale je to kvůli neaktualizovaným prémiovým šablonám poměrně časté :-(
  • [ ] Jak nejlépe identifikovat, zda je právě řešen jednoduchý produkt nebo konkrétní varianta? if ( get_class( $product ) == "WC_Product_Variation" ) mi nepřijde moc elegantní :-(
  • [x] Pokud má uživatel definovanou i možnost Skladem (hodnota nula) a má globálně nastavenou hodnotu nula pro celý eshop, tak tuto možnost odebrat z nabídky dropdownu pro výběr dodací doby.
  • [ ] Doplnit kontextovou nápovědu k variantám (vylepšit u produktů)
  • [x] Doplnit možnost definování vlastního textu (a formátu) pro počet produktů, např. změna z "1 skladem" na "Skladem: 1".
  • [x] Umožnit seskupování počtu produktů, např. "16 skladem" na "Skladem více než 10 ks" (+ doplnit třídu pro stylování).
  • [ ] Odebrat "(dostupné na objednávku)" u počtu produktů skladem, když je nastaveno "Povolit, ale informovat zákazníka"?
  • [ ] Zkontrolovat spouštěné akce pro zobrazování dodací doby + doplnit některé další (i pro další texty).
  • [ ] Zkontrolovat, zda jsou správné údaje v XML (= to, co je zobrazováno na webu).
  • [ ] Napsat návod s popisem všech možností + schéma (!)
  • [x] Umožnit zobrazení "1 skladem, další dodáme do týdne".
  • [x] Umožnit zobrazení hodnoty "Skladem" (defaultně se ve WooCommerce nezobrazuje).
  • [x] Co defaultní (automaticky instalované) hodnoty pro dodací dobu? Když je někdo nechce používat, tak jsou stejně uloženy, neovlivní to něco?
  • [x] Doplnit nastavení dodací doby do přehledu produktů v administraci.

pavelevap avatar Nov 07 '16 20:11 pavelevap

@pavelevap

  1. Dodací dobu zobrazovat u každé varianty, pokud nemá varianta zadanou dodací dobu vzít z nadřazeného produktu, pokud nemá ani jednu, vzít z globální.
  2. Ano, umožnil bych nastavení DD na úrovni produktu včetně dědění pro varianty.
  3. :-( To bych nevěřil, ale je to celkem možné.
  4. Když jsem narychlo řešil varianty, spíchl jsem tento kód. Nemohl jsem v rychlosti najít, jak v adminu rozlišit typ produktu, tak jsem to obešel přes css <div class="options_group show_if_simple show_if_external">, což také není dvakrát elegantní, ale v časovém presu mi to pomohlo. Jinak pro jednoduchý produkt if( $product->is_type( 'simple' ))
<?php
/** ADD DELIVERY DATE */

if ( get_option('nt_eddsdfs')['delivery_date_support'] == 1) {

    add_action( 'woocommerce_product_options_general_product_data', 'nt_add_delivery_date_fields' ); // simple product
    add_action( 'woocommerce_product_after_variable_attributes', 'nt_variable_delivery_date_variable_fields', 10, 3 ); // variable product
    add_action( 'woocommerce_product_after_variable_attributes_js', 'nt_variable_delivery_date_variable_fields_js' );  // variable product

/** Add Delivery Date fields to simple product */
function nt_add_delivery_date_fields() {
global $woocommerce, $post, $product;
// Delivery Date Field - show only if product type = simple or external
    ?>
    <div class="options_group show_if_simple show_if_external">
    <?php
woocommerce_wp_text_input(
    array(
        'id' => 'delivery_date',
        'label' => __( 'Delivery Date', 'nt-EDDSDFS'),
        'placeholder' => __('Enter the Delivery Date', 'nt-EDDSDFS'),
        'desc_tip' => 'true',
        'description' => __( 'Enter the delivery date of the product in days.', 'nt-EDDSDFS')
        )
    );
    ?>
    </div>
    <?php
}

// Save Field Delivery Date - simple product
    add_action( 'save_post', 'nt_dd_field_save',1 ,2 );
    function nt_dd_field_save($post_id, $post) {
    if( isset( $_POST['delivery_date'] ) ) {update_post_meta( $post_id, 'delivery_date', esc_html( $_POST['delivery_date'] ) );}
   }

// VARIABLE
/**Create new fields for variations */
function nt_variable_delivery_date_variable_fields( $loop, $variation_data, $variation ) {
?>
  <tr>
  <td>
  <?php
    // Number Field
    woocommerce_wp_text_input(
        array(
            'id'          => 'variable_delivery_date['.$loop.']',
            'label'       => __( 'Delivery Date', 'nt-EDDSDFS' ),
            'placeholder' => __('Enter the Delivery Date', 'nt-EDDSDFS'),
            'desc_tip' => 'true',
            'description' => __( 'Enter the delivery date of the product in days.', 'nt-EDDSDFS'),
            'value'       => get_post_meta($variation->ID, 'variable_delivery_date', true),
            'custom_attributes' => array(
            'step'  => 'any',
            'min'   => '0'
            )
        )
    );
    ?>
</td>
</tr>
<?php
}

/**
Create new fields for new variations
*/
function nt_variable_delivery_date_variable_fields_js($variation_data) {
// Number Field
    woocommerce_wp_text_input(
        array(
            'id'          => 'variable_delivery_date['.$loop.']',
            'label'       => __( 'Delivery Date', 'nt-EDDSDFS' ),
            'placeholder' => __('Enter the Delivery Date', 'nt-EDDSDFS'),
            'desc_tip' => 'true',
            'description' => __( 'Enter the delivery date of the product in days.', 'nt-EDDSDFS'),
            'value'       => get_post_meta($variation->ID, 'variable_delivery_date', true),
            'custom_attributes' => array(
            'step'  => 'any',
            'min'   => '0'
            )
        )
    );
}

//Save variation fields with AJAX
add_action('woocommerce_ajax_save_product_variations', 'variable_fields_process', 10, 2);

function variable_fields_process($product_id) {
$variable_post_id = $_POST['variable_post_id'];
$variable_custom_field = $_POST['variable_delivery_date'];

foreach ($variable_post_id as $key => $value) {
    if (isset($_POST['variable_delivery_date'][$key])) {
        update_post_meta($value, 'variable_delivery_date', $variable_custom_field[$key]);
    }
}
}

// Add New Variation Settings
add_filter( 'woocommerce_available_variation', 'load_variation_settings_fields' );
/**
 * Add custom fields for variations
*/
function load_variation_settings_fields( $variations ) {
    $nt_variation_description = get_post_meta( $variations[ 'variation_id' ], '_variation_description', true );
    $nt_variation_availability = get_post_meta( $variations[ 'variation_id' ], '_stock_status', true );
    if ($nt_variation_availability == 'instock'){

    $nt_variable_delivery_date = get_post_meta( $variations[ 'variation_id' ], 'variable_delivery_date', true );

        if ($nt_variable_delivery_date == 0){$nt_variable_delivery_date_0 = get_option('nt_eddsdfs')['delivery_date_0'];
            if (empty ($nt_variable_delivery_date_0)){$nt_variable_delivery_date = __('In Stock', 'nt-EDDSDFS');}
            else $nt_variable_delivery_date = $nt_variable_delivery_date_0;}

         elseif ($nt_variable_delivery_date <= 3){$nt_variable_delivery_date_3 = get_option('nt_eddsdfs')['delivery_date_3'];
            if (empty ($nt_variable_delivery_date_3)){$nt_variable_delivery_date = __('Within three days', 'nt-EDDSDFS');}
            else $nt_variable_delivery_date = $nt_variable_delivery_date_3;}

         elseif ($nt_variable_delivery_date <= 7){$nt_variable_delivery_date_7 = get_option('nt_eddsdfs')['delivery_date_7'];
            if (empty ($nt_variable_delivery_date_7)){$nt_variable_delivery_date = __('Within a week', 'nt-EDDSDFS');}
            else $nt_variable_delivery_date = $nt_variable_delivery_date_7;}

         elseif ($nt_variable_delivery_date <= 14){$nt_variable_delivery_date_14 = get_option('nt_eddsdfs')['delivery_date_14'];
            if (empty ($nt_variable_delivery_date_14)){$nt_variable_delivery_date = __('1 - 2 weeks', 'nt-EDDSDFS');}
            else $nt_variable_delivery_date = $nt_variable_delivery_date_14;}

         elseif ($nt_variable_delivery_date <= 21){$nt_variable_delivery_date_21 = get_option('nt_eddsdfs')['delivery_date_21'];
            if (empty ($nt_variable_delivery_date_21)){$nt_variable_delivery_date = __('2 - 3 weeks', 'nt-EDDSDFS');}
            else $nt_variable_delivery_date = $nt_variable_delivery_date_21;}

         elseif ($nt_variable_delivery_date <= 28){$nt_variable_delivery_date_28 = get_option('nt_eddsdfs')['delivery_date_28'];
            if (empty ($nt_variable_delivery_date_28)){$nt_variable_delivery_date = __('2 - 4 weeks', 'nt-EDDSDFS');}
            else $nt_variable_delivery_date = $nt_variable_delivery_date_28;}

         elseif ($nt_variable_delivery_date <= 35){$nt_variable_delivery_date_35 = get_option('nt_eddsdfs')['delivery_date_35'];
            if (empty ($nt_variable_delivery_date_35)){$nt_variable_delivery_date = __('3 - 5 weeks', 'nt-EDDSDFS');}
            else $nt_variable_delivery_date = $nt_variable_delivery_date_35;}

         elseif ($nt_variable_delivery_date <= 42){$nt_variable_delivery_date_42 = get_option('nt_eddsdfs')['delivery_date_42'];
            if (empty ($nt_variable_delivery_date_42)){$nt_variable_delivery_date = __('4 - 6 weeks', 'nt-EDDSDFS');}
            else $nt_variable_delivery_date = $nt_variable_delivery_date_42;}

         elseif ($nt_variable_delivery_date >= 43){$nt_variable_delivery_date_56 = get_option('nt_eddsdfs')['delivery_date_56'];
            if (empty ($nt_variable_delivery_date_56)){$nt_variable_delivery_date = __('4 - 7 weeks', 'nt-EDDSDFS');}
            else $nt_variable_delivery_date = $nt_variable_delivery_date_56;}


    $nt_output_variable_delivery_date = '<div class="woocommerce_dd">' . '<br /><span style="' . get_option('nt_eddsdfs')['css_delivery_date'] . '">' . $nt_variable_delivery_date . '</span><br /><br />';
    $variations['variation_description'] = $nt_variation_description . $nt_output_variable_delivery_date;}
    return $variations;

}

/** Show Delivery Date in product details */
    if ( get_option('nt_eddsdfs')['delivery_date_product_details'] == 1) {
            add_action( 'woocommerce_single_product_summary', 'delivery_details_simple_product', 9 );
        }
// Show Delivery Date on archive pages
    if ( get_option('nt_eddsdfs')['delivery_date_archive_page'] == 1) {
            add_action( 'woocommerce_before_shop_loop_item_title', 'delivery_details_simple_product' );
 }

function delivery_details_simple_product() {
    global $product;{
        $nt_delivery_date = get_post_meta( $product->id, 'delivery_date', true );
        if( $product->is_type( 'simple' )){
        if ($nt_delivery_date == 0){$delivery_date_days_0 = get_option('nt_eddsdfs')['delivery_date_0'];
            if (empty ($delivery_date_days_0)){$nt_delivery_date = __('In Stock', 'nt-EDDSDFS');}
            else $nt_delivery_date = $delivery_date_days_0;}

         elseif ($nt_delivery_date <= 3){$delivery_date_days_3 = get_option('nt_eddsdfs')['delivery_date_3'];
            if (empty ($delivery_date_days_3)){$nt_delivery_date = __('Within three days', 'nt-EDDSDFS');}
            else $nt_delivery_date = $delivery_date_days_3;}

         elseif ($nt_delivery_date <= 7){$delivery_date_days_7 = get_option('nt_eddsdfs')['delivery_date_7'];
            if (empty ($delivery_date_days_7)){$nt_delivery_date = __('Within a week', 'nt-EDDSDFS');}
            else $nt_delivery_date = $delivery_date_days_7;}

         elseif ($nt_delivery_date <= 14){$delivery_date_days_14 = get_option('nt_eddsdfs')['delivery_date_14'];
            if (empty ($delivery_date_days_14)){$nt_delivery_date = __('1 - 2 weeks', 'nt-EDDSDFS');}
            else $nt_delivery_date = $delivery_date_days_14;}

         elseif ($nt_delivery_date <= 21){$delivery_date_days_21 = get_option('nt_eddsdfs')['delivery_date_21'];
            if (empty ($delivery_date_days_21)){$nt_delivery_date = __('2 - 3 weeks', 'nt-EDDSDFS');}
            else $nt_delivery_date = $delivery_date_days_21;}

         elseif ($nt_delivery_date <= 28){$delivery_date_days_28 = get_option('nt_eddsdfs')['delivery_date_28'];
            if (empty ($delivery_date_days_28)){$nt_delivery_date = __('2 - 4 weeks', 'nt-EDDSDFS');}
            else $nt_delivery_date = $delivery_date_days_28;}

         elseif ($nt_delivery_date <= 35){$delivery_date_days_35 = get_option('nt_eddsdfs')['delivery_date_35'];
            if (empty ($delivery_date_days_35)){$nt_delivery_date = __('3 - 5 weeks', 'nt-EDDSDFS');}
            else $nt_delivery_date = $delivery_date_days_35;}

         elseif ($nt_delivery_date <= 42){$delivery_date_days_42 = get_option('nt_eddsdfs')['delivery_date_42'];
            if (empty ($delivery_date_days_42)){$nt_delivery_date = __('4 - 6 weeks', 'nt-EDDSDFS');}
            else $nt_delivery_date = $delivery_date_days_42;}

         elseif ($nt_delivery_date >= 43){$delivery_date_days_56 = get_option('nt_eddsdfs')['delivery_date_56'];
            if (empty ($delivery_date_days_56)){$nt_delivery_date = __('4 - 7 weeks', 'nt-EDDSDFS');}
            else $nt_delivery_date = $delivery_date_days_56;}

        echo '<div class="woocommerce_dd">';
        echo '<span style="' . get_option('nt_eddsdfs')['css_delivery_date'] . '">' . $nt_delivery_date . '</span><br />';
        echo '</div>';
} //end product type = simple
}
} //end function delivery_details_simple_product
} //end delivery date support option

novetrendy avatar Nov 08 '16 07:11 novetrendy

Poslední úpravy funkce pro nastavení dodací doby přinesly zajímavý pozitivní důsledek. Pokud někdo nastaví nějakou dodací dobu u produktu, ale následně to zapomene změnit a doplní počet kusů (takže je produkt skladem), tak to bude bráno jako relevantní a bude to mít přednost před nastavením pluginu. Minulá verze 0.5 upřednostnila v tomto případě nastavení dodací doby, což bylo špatně, protože už byl produkt reálně skladem.

pavelevap avatar Mar 01 '17 20:03 pavelevap

  • [ ] Ve WooCommerce 3.3 byl přidán nový status onbackorder, bude potřeba ho začlenit do logiky dodací doby a vše otestovat (podrobnosti).
  • [ ] Funkce ceske_sluzby_ziskat_nastavenou_dostupnost_produktu() je velmi podobná funkci ceske_sluzby_xml_ziskat_dodaci_dobu_produktu(), chtělo by to asi sloučit (a funkce rozsekat na jednotlivé metody).

pavelevap avatar Aug 19 '19 19:08 pavelevap