Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Získání a vypsání dat z $order - WP/WC

Aktivity
Avatar
M.B.
Člen
Avatar
M.B.:25.4.2021 9:39

Ahoj, běžně jsem tu zatím bloumal a inspiroval se tématy, co jsem tu našel a nyní bych potřeboval taky pomoc s Wordpress+Woo­Commerce. Potřebuji přidat pár údajů z objednávky do vzoru faktury, ale nejsem v PHP učený, prakticky potřebuji 2-3 data ohledně DPH a přidat je již do hotové Simple faktury

Zkusil jsem: Zkoušel jsem hledat stackoverflow, ale nic z toho nebylo v PHP.
Našel jsem toto: https://www.itnetwork.cz/…lighter/1416 , ale neumím to využít v kódu faktury (vždy mi to skončí errorem), který posílám zde: https://www.itnetwork.cz/…lighter/1417

Chci docílit: Řeším to, že v Simple nejsou údaje, co na faktuře musí být.

Díky moc za každou pomoc.

Editováno 25.4.2021 9:41
 
Odpovědět
25.4.2021 9:39
Avatar
M.B.
Člen
Avatar
M.B.:25.4.2021 9:46

Zapomněl jsem dodat, že mi tam chybí: cena za zboží bez DPH, kolik je sazba DPH, cena za ks s DPH.

 
Nahoru Odpovědět
25.4.2021 9:46
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:26.4.2021 21:10

Zadny z tech systemu nepouzivam.

"2-3 data ohledně DPH a přidat je již do hotové Simple faktury"
" cena za zboží bez DPH, kolik je sazba DPH, cena za ks s DPH."

// https://www.itnetwork.cz/dev-lighter/1416
$order = wc_get_order( $order_id );
$order_data = $order->get_data(); // The Order data

// https://www.itnetwork.cz/dev-lighter/1417 - jestli tohle je tvuj kod, tak tam mas neco podobneho
$order = wc_get_order($order_id);

Takze tam doplnis, co ti chybi a pak uz muzes vypisovat. Jen si vybrat z toho prvniho souboru, co by to melo byt, treba

$order = wc_get_order($order_id);
$order_data = $order->get_data(); // The Order data

$order_hipping_first_name = $order_data['shipping']['first_name'];
$order_shipping_last_name = $order_data['shipping']['last_name'];

echo $order_hipping_first_name;
echo $order_shipping_last_name
 
Nahoru Odpovědět
26.4.2021 21:10
Avatar
M.B.
Člen
Avatar
M.B.:27.4.2021 11:42

Ahoj, děkuji za odpověď, kód ale nefungoval, PHP vůbec neumím, ale s logikou na tom nejsem tak špatně, takže tvůj kód byl pro mě i odrazovým můstkem to trochu pochopit, takže jsem splácal toto, pro příklad:

<?php echo('Total: '); echo $order->get_total();?>

A funguje.
Ale bohužel nemůžu přijít ještě na jednu věc a to, jak spočítat právě cenu bez DPH, potom samotné DPH a tak dále.
Jedná se o toto:

<?php $items = $this->get_order_items(); if( sizeof( $items ) > 0 ) : foreach( $items as $item_id => $item ) : ?>
<tr class="<?php echo apply_filters( 'wpo_wcpdf_item_row_class', $item_id, $this->type, $this->order, $item_id ); ?>">
        <td class="product">
                <?php $description_label = __( 'Description', 'woocommerce-pdf-invoices-packing-slips' ); // registering alternate label translation ?>
                <span class="item-name"><?php echo $item['name']; ?></span>
                <?php do_action( 'wpo_wcpdf_before_item_meta', $this->type, $item, $this->order  ); ?>
                <span class="item-meta"><?php echo $item['meta']; ?></span>
                <dl class="meta">
                        <?php $description_label = __( 'SKU', 'woocommerce-pdf-invoices-packing-slips' ); // registering alternate label translation ?>
                        <?php if( !empty( $item['sku'] ) ) : ?><dt class="sku"><?php _e( 'SKU:', 'woocommerce-pdf-invoices-packing-slips' ); ?></dt><dt class="sku"><?php echo $item['sku']; ?></dt><?php endif; ?> | <dt class="sku"><?php if( !empty( $item['product'] ) ) _e( 'Ovečky: '); $this->product_attribute('Ovečky', $item['product']);  ?></dt>
                        <?php if( !empty( $item['weight'] ) ) : ?><dt class="weight"><?php _e( 'Weight:', 'woocommerce-pdf-invoices-packing-slips' ); ?></dt><dd class="weight"><?php echo $item['weight']; ?><?php echo get_option('woocommerce_weight_unit'); ?></dd><?php endif; ?>
                </dl>
                <?php do_action( 'wpo_wcpdf_after_item_meta', $this->type, $item, $this->order  ); ?>
        </td>
        <td><?php echo $item['quantity'],('ks'); ?></td>
        <td><?php echo $item['price']; ?></td>
        <td><?php echo $item['price']; ?></td>
        <td><?php echo $item['price']; ?></td>

</tr>
<?php endforeach; endif; ?>

zde je kód, který počítá každý řádek zvlášť, logicky aby údaje seděly ke každému zboží na samostatném řádku. Na konci je právě <?php echo $item['price']; ?> a já bych potřeboval s tímto $item['price'] počítat. Když jsem jakožto noob dle logiky věci zkusil přidat do výpočtu, tak mi to vypisuje nulu.

Děkuji za pomoc.

Editováno 27.4.2021 11:44
 
Nahoru Odpovědět
27.4.2021 11:42
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:28.4.2021 21:36

Nerozumim tomu.
Tyto 3 prikazy ti vypisou, co je v $item.

echo '<pre>'; var_dump($item); echo '</pre>';
 
Nahoru Odpovědět
28.4.2021 21:36
Avatar
Jan Kerhart
Člen
Avatar
Odpovídá na M.B.
Jan Kerhart:6.5.2021 3:28

Ahoj,
s $item['price'] nemůžeš počítat tak jak jsi asi chtěl asi proto, že se interně jedná o string (text), protože je v něm asi už zahrnuta i jednotka (Kč). A i kdyby to šlo, tak to rozhodně nedělej! Narušuješ tak model aplikace (provádíš výpočty v šabloně, tam nemají co dělat), ikdyž teda zrovna WordPress je sám o sobě hrozná prasárna a není tam žádný pořádný MVC (nebo podobný) model a dokonce ne vše je psáno s pomocí OOP. Ale hlavně můžeš mít více zaseb DPH apod. a mohlo by se ti velmi snadno v budoucnu stát, že to v té šabloně nepředěláš a budeš mít na faktuře špatně spočítané údaje.

Když se podíváš, odkud se ta data do té šablony dostávají, tak najdeš metodu get_order_items a v ní vidíš, co vše máš v tom poli $item k dispozici a jak se to počítá. Odkaz na GitHub

Jestli jsem se správně díval, tak cena za zboží bez DPH je ex_price, sazba DPH je tax_rates nebo calculated_tax_ra­tes (nevím, jaký je v tom rozdíl a nechce se mi to zkoumat :D), cena za ks s DPH je single_price a cena za ks bez DPH je ex_single_price.

Takže si do té šablony pouze přidej:

<td><?php echo $item['ex_price']; ?></td>

atd. a nic nepočítej. A pokud by jsi potřeboval něco, co tam opravdu už spočítané není, tak výpočty prováděj v té metodě get_order_items a předej si jen ten výsledek do šablony, kde ho pouze vypíšeš.

 
Nahoru Odpovědět
6.5.2021 3:28
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:6.5.2021 7:18

Jan Kerhart: "výpočty prováděj v té metodě get_order_items", jako, logika spravna, souhlasim, ale, pokud to bude chtit updatovat, tak na to bude muset myslet. Takze, doporucuji pouzit nejaky cesky text pro oznaceni tve hodnoty, aby se vyrazne lisil od originalni anglicky price_*

 
Nahoru Odpovědět
6.5.2021 7:18
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 7 zpráv z 7.