Diskuze: Získání a vypsání dat z $order - WP/WC
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Zobrazeno 7 zpráv z 7.
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
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
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.
Nerozumim tomu.
Tyto 3 prikazy ti vypisou, co je v $item.
echo '<pre>'; var_dump($item); echo '</pre>';
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_rates (nevím, jaký je v tom
rozdíl a nechce se mi to zkoumat ), 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š.
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_*
Zobrazeno 7 zpráv z 7.